Unicodeテキストの文字単位的処理

標準的なUnicodeテキスト(UTF-16LE/BOM付き/CRLF改行)の文字単位的処理である。
以後、ここでは標準的なUnicodeテキストといえばこれを前提にする。
コマンドプロンプトではShift_JISのテキストと標準的なUnicodeテキストはtypeコマンドで表示できる。

Unicodeではバイト単位的な処理はあまり出番がない。文字単位で処理するのが簡明である。
なお、ここは基本パターンであるからunicode.hやunicode.libは使っていない。

これは文字単位でシーケンシャルに処理する場合の「ひな型」パターンである。
改行の処理などはこれでいける。



文字単位的処理の例

Unicodeテキストの改行コードを判定する(unicode_check_newline.cpp)。



unicode_check_newline.cpp(ccp_0327)


文字単位的処理のお膳立て

Unicodeの文字単位的処理でボケたアタマを刺激するには、Unicodeファイルを文字単位的に16進ダンプするツールがあると便利である。そこで作ったのが「udisp16.exe」である(udisp16.cpp)。


下記のバイト単位的な16進ダンプと比べるとかなり見やすい(disp16.cpp)。



udisp16.cpp(ccp_0345)
disp16.cpp(ccp_0344)


半角全角の変換

Unicodeテキストの「半角→全角」、「全角→半角」の変換といっても、対象になるのはアルファベット(とそれに関係する記号類)と数字しかない。これは文字単位的処理で簡単にカタがつく部分である。

「半角→全角」の変換(uni_hanzen.cpp)。


「全角→半角」の変換(uni_zenhan.cpp)。
上で変換したファイルを元に戻すことになる。



uni_hanzen.cpp(ccp_0336)
uni_zenhan.cpp(ccp_0337)


ひらがなカタカナの変換

Unicodeテキストの「カタカナ→ひらがな」、「ひらがな→カタカナ」の変換も文字単位的処理で簡単にカタがつく部分である。

「カタカナ→ひらがな」の変換(uni_kanahira.cpp)。
元のファイルの「ファイル」が「ふぁいる」に変換されている。
この逆も同様だから省略(uni_hirakana.cpp)。ただし、ひらがな全部がカタカナになる(当然)。



uni_kanahira.cpp(ccp_0338)
uni_hirakana.cpp(ccp_0339)


半角カタカナの変換

この点で、異端が半角カタカナである。まっとうな文字コードとはほど遠いシロモノだから、これをなんとかしようとすると相当に面倒である。
この項は長くなるで、別ファイルの「半角カタカナを全角カタカナ/ひらがなへ変換」として独立させ、そこに移動した。

参考
半角カタカナを全角カタカナ/ひらがなに変換する
半角カタカナを全角カタカナ/ひらがなに変換する(決定版)



こういうことが簡単にできるのはANSI(ASCII)文字とUnicode文字がほぼ規則的な対応関係をもっていることによる点が大きい。

もっとも、機械的に文字コードの対応だけでいくと半角の「\」が全角の「\」になるようなことはあるが、これは個別に修正すればいいだろう。一般的にはほぼ対応している。

また、全角半角変換、ひらがなカタカナ変換もそれが簡単にできるのはUnicode内での対応が規則的になっているからである。したがって、半角カタカナから全角カタカナへ簡単に変換ができるものならば、全角ひらがなへの変換も同様に簡単だということになる(その必要性はさておき)。








Unicode,UTF-8,UTF-16,Big,Little,Endian,LE,BE,Shift_JIS,SJIS,CR,LF,CRLF,byte,bit,word,CSV,BOM,Encode,Decode,ANSI, バイナリ,文字コード,16進コード,文字列,ビッグ,リトル,エンディアン,ユニコード,改行,バイト,ビット,テキスト, 半角,全角,カタカナ,ひらがな,カナ,漢字,エンコード,デコード,16進文字列,C言語,C++言語,変換,解析,判定,判別,サンプル, _mbslen,_mbsnccnt,_mbsnbcnt,_mbctombb(zentohan),_mbbtombc(hantozen),_mbctohira,_mbctokana,MBCS,char,unsigned, _mbctolower,_mbctoupper,_mbcjistojms,_mbcjmstojis,_mbbtype,_mbsbtype,mbstowcs,wcstombs,mbtowc,wctomb, マルチバイト,MultiByteToWideChar,WideCharToMultiByte,