プログラマのための文字コード技術入門 第8章「はまりやすい落とし穴とその対処」その2

今日は第8章の後半です。

  • 古くから Unix 使ってる人間にはおなじみの改行コード問題
    • nkf -L オプションで改行コードの変換もできる
  • 全角半角問題
    • 文字コードとしては全角半角という区別に意味はない。同じ文字を示してるし表示上の問題は文字コードが担うべきではない、という原則で文字コードが全角半角を区別することを強く否定
    • とはいっても混在しているのでどうするかという話で全角半角は適宜変換して正規化したり同一視したりしましょうという現実的な対処法
  • 円記号問題
    • 元はといえば ISO/IEC 646JIS X 0201 で 0x5C の文字をバックスラッシュと円記号とそれぞれ違う文字をわりあててしまったのが事の起こり
    • 表示上の問題はフォントによることがありアプリケーションで固有とは限らない
    • 文字コードの変換を通すとより難しい問題が……
    • 原理主義的にはバックスラッシュと円記号はそれぞれ「文字」として、文字コード内でどうエンコードされるかに応じて解釈すべき -> 「半角の」バックスラッシュが存在しない Shift_JIS においてはたとえば改行文字を "\n" と書くべき
      • さすがにこれはちょっと……
      • Shift_JIS は使わない」というのがよい対処法な気がしてきました
  • 波ダッシュ問題
    • これは Unicode で '〜' ←こういう文字が WAVE DASH と FULLWIDTH TILDE の2つのコードポイントがあるために文字変換を通すと文字が変化してしまう、というもの
    • ここまで Unicode は「問題を回避するために頼れる優等生」でしたがこの問題では問題の元凶に……

これで第8章も読み終えて、本編は全て終わりました。
本書を読む前には、漠然と「文字コードは難しい」というイメージを抱いていました。読み終えて今、やはり「文字コードは難しい」と思います。計算機での処理の複雑さだけではなく、歴史的経緯、互換性、政治的/文化的こだわり……いろいろなものが絡みあっていて、すんなり解決できない問題がうごめいています。でも同じ「文字コードは難しい」でも読む前と後でそこにこもる実感は少しは違ってきました。

と、まとめたところですが、本書にはこの後 Appendix が A.1 から A.6 までかなり沢山ありますので、まだしばらくこれを読みます。「本書執筆の舞台裏」なんておもしろそうです。