中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

これって半角なんだっけ?

ぽぴ王子に怒られたので、こちらで。

Q.その文字が半角かどうかをわかる方法を教えてください。

A.Shift_JISに変換して1バイトか2バイトかでわかるよ。

本当か?

というか、もともとはShift_JISでのことを言っているのか?という問いかけで堂々めぐりしているわけだけど

http://bbs.wankuma.com/index.cgi?mode=al2&namber=6223

[Text.Encoding]::GetEncoding("shift_jis").GetBytes("㉑")

まるがこみ数字の21というやつです。UnicodeでいうとU+3251(10進12881)

これの結果は

PS C:\Users\localnaka> [Text.Encoding]::GetEncoding("shift_jis").GetBytes("?")
63
PS C:\Users\localnaka>

このように1バイトと判定されています。ちなみにU+3F

いわゆるはてなです。?

Unicode=>Shift_JIS変換する際に表現できる文字集合が違うために文字落ちが発生します。

この文字がはてな記号にマッピングされているという次第。

文字について0は半角で0は全角だなんて前時代的なことを、疑問も持たずに受け入れているということは、日本の文化の衰退を意味します。

日本語について日本の技術者はもっと向き合わなければいけないのです。

少なくとも私はそう考えています。

 

さっきのQに対する明確な回答は残念ながらUnicodeのままにすべての文字をまずはサーチして、Unicodeにあるが、Shift_JISに無い文字はどうするかを考える。

いわゆるASCII文字エリアを半角とみなす

などの処方が必要です。

独自で?へのマッピングでなく豆腐へのマッピングにするなどをおこなうのであれば、合成文字、サロゲートペアへの考慮も本来は必要です。

投稿日時 : 2007年8月11日 15:33

コメントを追加

# re: これって半角なんだっけ? 2007/08/11 17:30 恣意の


半角カナとは?

Wikipedia:半角カナ
>JIS X 0201の片仮名文字集合の部分の通称

広辞苑第六版:半角
>印刷文字・ワープロ文字1字分の正方形の半分の大きさ。また、その大きさの活字・込物こめもの類。「―文字」


半角についての話が始まったなら技術者ならば
Wikipediaの方を無意識に選択するべきだと思うんだけどなぁ...

# heiさんが後者の視点で動いてんだから、そりゃ話が噛み合わない罠
#
# フォント種別が等幅フォントなら「半角」は探せると思うんだ
# フォント定義ファイルから幅の値を持ってくるだけだから
# でも、絶対にekさんはそれが目的じゃねーだろうしなw


なんつーか、「半角カナ」という言葉がすべての元凶なきもする
んー、誰か以下の○○に当てはまる新しい言葉を作ってくれんかしらw

「一つのコード種別において
 各文字コード値の定義コード長が文字により不定長で且つ
 nコード長文字αの定義値が文字βの定義値に対しnコード長境界で一致する

 このような文字コード値を含むコード種別γにおいて、
 nコード長文字αをコード種別γにおける○○文字であると定義する」



# また、他コード種別への変換は「互換性の有無」であって
# 半角の問題とは別問題なはずなのに一緒に論議しちゃったから
# それも、あの堂々巡りがされた原因でもあると思ったりしなかったり

# re: これって半角なんだっけ? 2007/08/11 19:20 中博俊

上記の定義で行くと、UTF-16のUnicode文字はすべて半角で、サロゲートペアは全角という意味になりますね。

# re: これって半角なんだっけ? 2007/08/11 20:15 とっちゃん

全角文字、半角文字は組版用語(写植)です。

なので、いちばん近いのは広辞苑側。

で、ネタとしては、UNICODEがじゃなくて ANK 文字を指してるのか否かで話すればいいんじゃないかと。

全角半角の半角文字は、ANK文字を指すのが本来なわけですから、そこを抜きに話しても通じないし、ぶれも出る。

で、ANKがわかんねーということであれば、JISを調べるなりなんなりで、きちっと勉強して出直してこいで済むしねw

# re: これって半角なんだっけ? 2007/08/11 21:39 hei

こんにちは。

># heiさんが後者の視点で動いてんだから、
え?私が「半角とは見た目が半分の文字だ!」と言っているように思われました???
Jittaさんが例に出したWORDで作成した文字が半角だなんて
これっぽっちも思ってませんが・・・

>0は半角で0は全角だなんて前時代的なことを、疑問も持たずに受け入れている

ćや㉑が全角か半角かなど
私にはどうでもいいです。
また、0と0のどっちが全角でどっちが半角かも
どうでもいいことです。
私が言っていたのは、
実務が解決できれば定義なんかどうでもいいでしょうということです。
実務で郵便番号を例にあげたようなことが問題になることがあって、
それは一般に(前時代的だそうですが)「全角半角」と呼ばれていて、
私がこれまで学んできた知識ではStrConv関数や先の正規表現で解決できるのに、
なんで「定義」にこだわるのだろうということがわかりませんでした。

この中さんの解説でようやくそれが理解できました。


ただ、私は確かに無知ですが、
そうだと思うならもう少し早くヒントを頂けてもよかったのではないでしょうか?
質問掲示板の運営者として、
私の発言が「日本の文化の衰退を意味します。」はないと思いますよ。

# re: これって半角なんだっけ? 2007/08/11 22:27 中博俊

heiさんがというのではなく、みんながみんな疑問を持たない現状に警鐘を鳴らし続けているわけです。
あのすれでは、これだけじゃわからないからちゃんと定義を教えてと言っているだけです。
>私がこれまで学んできた知識ではStrConv関数や先の正規表現で解決できるのに、
なんで「定義」にこだわるのだろうということがわかりませんでした。
それより、スレ元と全然違うこと言ってますよ?
これ。

if "あいうえお" == 全て全角か?
 全角です。
else
 半角が混ざってます。
を判定したいってことです。

いわゆる全角のひらがなだけが知りたいっていうことなら、全部の文字をチェックすればいいだけですから、話は簡単かもしれません。
"か゜" かの鼻濁音 などはどうするの?って問題があるわけですが。

それ以前にShiftJISとすら明言されていない。

そういうことなんです。

# re: これって半角なんだっけ? 2007/08/12 1:07 恣意の

# もはや本題とは別物だね、おいら

> 中
>上記の定義で行くと、UTF-16のUnicode文字はすべて半角で、サロゲートペアは全角という意味になりますね。

うに? サロゲートペアは同意だけどUTF-16が"全部"半角(=○○)なのは違くない?
あくまで半角な文字は他の文字コード値の一部なんだから、必ず全角は存在するじゃない

# つーか、上の定義はShift-JIS内の0x5c等を抽象化しようとしたんだけど、コケたのかしら?

> hei
>え?私が「半角とは見た目が半分の文字だ!」と言っているように思われました???
>Jittaさんが例に出したWORDで作成した文字が半角だなんて
>これっぽっちも思ってませんが・・・

あいや、ごめんなさい

てっきり「0」を全角、「0」を半角と断言されたんで、
内部的な"数値の意味"の話ではなく、表示上の"数字の意味"だけで話されてるのかと思いました


んで、私も「日本の文化の衰退を意味します。」は言い過ぎだと思う
定義を疎かにして衰退するのは「文化」じゃなくて「技術」ではないかと(ぇー

# あー、でも「文化」も新しい定義付けにおける既存文化の枝葉か?
# んで、コード値の話は技術の話・・・見た目の話なら文化・・・か?
# うー、この辺の区分けがイミフになってきた...

# re: これって半角なんだっけ? 2007/08/12 9:20 中博俊

文化に云々というのは>日本語について考えることをやめる

にかけているつもりです。
現状が完璧に程遠いのに現状を受け入れるじゃなく、正しいと思っちゃ負けでしょう。
そう強く思っています。

# That's a sharp way of tihnknig about it. 2012/10/17 21:12 Johnie

That's a sharp way of tihnknig about it.

タイトル
名前
URL
コメント