文字コード本メモ

身近にあったのに何故読まなかったんだ、この本!素晴らしい!!

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

とりあえず興味深かった章とポイントをメモ。

  • 4.3 Unicodeの符号化方式
  • 7.1 Java ― 内部処理をUnicodeで行う
    • UCS正規化。内部コードにUnicodeを利用。
    • 入力、出力時に文字コード変換。入力の文字コード、出力時の文字コードには、エンコーディング未指定の場合はシステム標準の文字コードが採用される
    • ソースコードが非Unicodの場合でも、Unicodeエスケープを用いることで、Unicodeにしかない文字を記述することができる。\uに続けて16進4桁で表現する
    • 例えば、propertiesファイルはISO/IEC8859-1しか対応していないため、Unicodeエスケープを用いて内容を記述すると良い
    • String は UTF-16で文字列を扱う。charは符号なし16ビット整数で、UTF-16を構成する16ビットの単位に対応する。
    • サロゲートペアや合成用濁点の存在のため、Stringのlengthは文字数を表していない(charは1文字ではなく「コード単位」である)
  • 8.3 改行コード
  • 8.5 円記号問題
    • JISX0201とASCIIの違いは、8x5c(円記号)と0x7e(オーバーライン)のみ
    • Shift-JISは前者の拡張、EUC-JPやUTF-8は後者の拡張であるため、上記違いは継承されている
  • 8.6 波ダッシュ問題
    • JIS系の波ダッシュに対応するUnicode系の文字を、WAVE DASH と認識している実装と、 FULLWIDTH TILDE と認識している実装の2種類が出回っている
    • JIS⇒Unicode⇒JISと変換する場合、1回目の変換機と2回目の変換機で上記認識が異なっていると、2回目の変換時に対応するJIS側のコードが存在しないので化けてしまう
    • 対処方法は、「FULLWIDTH TILDE が入っていたら一律 WAVE DASH に置き換える」が現実的だろう