文字のチェック処理を扱う必要が出てきたのでテストデータを作っているのですが、サロゲートペアがどのように扱われるかについて勘違いしていました。
たとえば、U+29E3D、「ほっけ(魚+花)」という文字ですが、これはプログラム中では以下のように取り扱われるようです。
- Lengthプロパティは2(2文字扱い)
- shift_jisに変換すると「??」(1バイト?が2つ)
- 見た目は1文字
文字数とかの確認でこういう文字を扱うときは注意が必要ですね。上記のようにshift_jis変換してバイト数を数えると2バイトになるのも要注意です(4バイトかと思ってた)。
参考
ユニコード文字列のバイト数を数える(shift_jis変換後のバイト数)。
'カウント対象文字がinputString変数に入っていると想定 byteLength = System.Text.Encoding.GetEncoding("shift_jis").GetByteCount(inputString)
ユニコードの番号指定で文字を文字列変数に入れる。この場合、上記の「ほっけ」は
'ホッケという文字を出す場合 target = System.Convert.ToString(Char.ConvertFromUtf32( System.Convert.ToInt32("29E3D", 16)))
プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)
- 作者: 矢野啓介
- 出版社/メーカー: 技術評論社
- 発売日: 2010/02/18
- メディア: 単行本(ソフトカバー)
- 購入: 34人 クリック: 578回
- この商品を含むブログ (129件) を見る