{{category 問題}} !!概要 波ダッシュ問題とは、Shift_JISやEUC-JPのようなJIS X 0208ベースのコードからUnicodeに変換する際に、一部の記号の対応するUnicode符号位置がおかしいコード変換の実装がある問題を指します。記号の文字化けの原因となっています。この問題に現れる代表的な記号が波ダッシュであることから、波ダッシュ問題といいます。 !!一覧 以下に、問題の対象となる文字の一覧を記します。 表の中の「文字名」は、JIS X 0208にて規定されている文字名であり、Unicode ([[ISO/IEC 10646]] UCS) の文字名に対応します。 「誤り」の変換先に移す実装は、主にMicrosoft Windowsに見られます。 ,日本語通用名称,区点,SJIS,文字名,正しいUnicode符号位置,誤り ,波ダッシュ,1-33,8160,WAVE DASH,U+301C,U+FF5E ,双柱,1-34,8161,DOUBLE VERTICAL LINE,U+2016,U+2225 ,負符号,1-61,817C,MINUS SIGN,U+2212,U+FF0D ,セント記号,1-81,8191,CENT SIGN,U+00A2,U+FFE0 ,ポンド記号,1-82,8192,POUND SIGN,U+00A3,U+FFE1 ,否定記号,2-44,81CA,NOT SIGN,U+00AC,U+FFE2 ,ダッシュ(全角),1-29,815C,EM DASH,U+2014,U+2015 !!対策 この問題を引き起こさないためには、上記「正しい符号位置」への変換を行うコード変換を用いることです。 この観点から最も推奨されるのは、Shift_JIS-2004 (Shift_JISX0213)の変換を用いることです。例えばiconvコマンドでは下記のようなオプション指定にてシフトJISからUTF-8へ変換します。 iconv -f SHIFT_JISX0213 -t UTF-8 < sjis.txt > utf8.txt これにより、正しいUnicode符号位置へ変換されます。 Javaでは "x-SJIS_0213", Pythonでは "shift_jis-2004" で使えます。 一方、"CP932" や "Windows-31J" のようなWindowsのベンダ定義外字の指定を用いると、誤った変換が行われる可能性が高くなるので、用いるべきではありません。(CP932と指定しても、上記の正しい変換を用いる実装もあるので、常に間違った変換が行われるとは限りません)