Shift-JIS 0x5C問題

Shift-JISコード文字の2バイト目に0x5C(エスケープシーケンス)が含まれるときに生じる不具合について

C言語などのプログラミング言語は " \ " や " ¥ " をメタ文字(エスケープシーケンス)として扱います。
XMLやHTML,CSVの読み込みでも同様の問題が発生します。

" \ " , " ¥ " の文字コードは 0x5C です。

一方でShift-JISでは、例えば以下の文字が2バイト目に 0x5C を含みます。

0x5Cを含む文字の例

文字 16進数 意味・用例
0x81, 0x5C 半角のダッシュ
0x94, 0x5C 機能
0x95, 0x5C 図表、別表

 

Shift-JISの2バイト目が予想外の影響(不具合)を引き起こす例

Shift-JISに未対応のコンパイラ(言語処理系)は『能』の2バイト目の0x5Cをエスケープ文字として扱い、行末の改行文字(例えば CR / 0x0D )をエスケープします。

結果として1行目と2行目が連結されて、2行目もコメントアウトされます。

文字がエスケープされた後の振る舞いはケースバイケースですので十分に注意する必要があります。