トップ 一覧 検索 ヘルプ RSS ログイン

波ダッシュ問題の変更点

+!!文字化け
+
+上記の「正しいUnicode符号位置」を用いる変換だけを使っている分には問題を生じませんが、誤った変換が混入すると、変換したコードを元のコードに戻そうとした際に対応先がなくて「?」に化けるなどします。
+
+例えば、波ダッシュ(WAVE DASH) SJIS 0x8160をUnicodeに変換する際に、上記の「誤り」の符号位置 U+FF5E (FULLWIDTH TILDE, 全角チルダ) にしてしまうと、変換後のデータを別のプログラムで再びSJISに戻そうとした時に、U+FF5Eに対応するコードがSJISに存在しないために「?」などに化けてしまいます。
+
+こうしたことが生じるケースは、例えば、Unicodeに変換する時にCP932 (MS932, Windows-31Jなど) のような上記の誤った符号位置に移す変換器を用いてしまい、一方、逆方向の変換には Shift_JIS のような正しい変換器を用いた場合です。
+
-この問題を引き起こさないためには、上記「正しい符号位置」への変換を行うコード変換を用いることです。
+この問題を引き起こさないためには、上記「正しい符号位置」への変換を行うコード変換を常に用いることです。
-これにより、正しいUnicode符号位置へ変換されます。
+これにより、正しいUnicode符号位置へ変換されます。この指定は、波ダッシュ問題を避けるだけでなく、丸つき数字やローマ数字等の救済にも効果があり、また第3第4水準漢字やアクセントつきラテン文字などといった日本で使用されている各種の文字への対応という点からも望まれます。
-Javaでは "x-SJIS_0213", Pythonでは "shift_jis-2004" で使えます。
+UTF-8からSJISへ変換するには、上の -f と -t を逆にします。
+ iconv -f UTF-8 -t SHIFT_JISX0213 < utf8.txt > sjis.txt
+
+iconv以外で同様の指定をするには、文字コードを指定する場面で例えばJavaでは "x-SJIS_0213", Pythonでは "shift_jis-2004" とすると、Shift_JIS-2004を指定できます。
+
+
+!!参考
+
+* [JIS X 0213とUnicodeの対応表|http://x0213.org/codetable/] - 機械可読形式のコード変換表。正しい変換が得られます。
+* [プログラマのための文字コード技術入門|https://www.amazon.co.jp/gp/product/477414164X/ref=as_li_qf_sp_asin_tl?ie=UTF8&amp;camp=247&ampcreative=1211&amp;creativeASIN=477414164X&amp;linkCode=as2&amp;tag=x0213-22] 第8章