sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

文字コード超研究 19章 その3

文字コード「超」研究 改訂第2版

文字コード「超」研究 改訂第2版

前回の続き

19章 Unicode

UnicodeShift_JIS

JIS X 0201JIS X 0208:1983

  • 半角の/(JIS X 0201では 0x2f)はUnicodeではU+002F(SOLIDUS)
  • 全角の/(Shift_JISでは 0x815e)は U+FF0F(FULLWIDTH SOLIDUS)
  • 半角の¥(JIS X 0201では 0x5c)はUnicodeではU+00A5(YEN SIGN)
  • 全角の\(Shift_JISでは 0x815f)は U+005C(REVERSE SOLIDUS)
  • 半角の(ASCIIでは 0x5c)は U+005C(REVERSE SOLIDUS)。

/は半角全角ともに納得のいく変換、しかし¥の方は微妙に… 0x5cを半角¥に割り当てている我々が悪いのか…というより、グリフの幅がちょっと違うだけなのに、半角全角と別の字体として扱っているのが間違いという話もありますね…

UnicodeとCP932

0x5cはbackslashと明確に定義されている。Windows上で0x5cが¥に見えているのは、MSゴシック等のフォントがたまたま¥と表示しているに過ぎないらしい。

round trip conversion / around the world trip conversion

ある文字コード系から別の文字コード系に変換し、元の文字コード系に戻した時に、元のデータに戻る事をround trip conversion と呼ぶ。両方の文字コード系が1対であれば必ず成立する。 また、3つ以上の文字コード系の変換で元のコード系に戻した時に、元のデータに戻る事を around the world trip conversion という。

Shift_JIS <-> Unicodeや CP932 <-> Unicodeは成立するが、 Shift_JIS -> Unicode -> CP932は 成立しない文字がある。これは厳密にはShift_JISとCP932は同一のものではないためである。

¥(0x5c)や 〜(WAVE DASH Shift_JISやCP932では0x8160)等がその典型。

文字合成と正規化

2つ以上も文字を使って1文字を作る事を文字合成と呼ぶ。文字合成を使わなくても書ける字を文字合成で書く事も規格的に認められており、両者を同じ文字として扱う必要がある。 この為に、文字を正規化する必要がある。方法はいくつかあるが、分解可能文字があれば分解し、それ同士で比べるのが簡単か。

合成除外

ある文字を分解し、合成しても元の文字にならないものが存在する。こういった文字を合成除外と呼ぶ。 U+F900 - FAFF(CJK互換漢字), U+2F800 - 2FA1F(CJK互換漢字拡張)の文字がこれに該当する。

分解可能文字が1文字で、CJK文字の範囲に入っている物は要注意。


というわけで、長かった19章も終了。気がつけば、あと50ページでこの本も終わりです。さぁもう一踏ん張り。

次回へ続く