「ダメ文字」とも言われるこの問題そのものを認識していなかったので知識としてまとめる。
元ネタ
こちら、Shift_JISの0x5c問題ではないかという推測をしている方がおられますね。そうかもしれません。0x5c問題については、徳丸本初版・2版とも第6章で説明しています。実は6章は2版の削除候補だったのですが、残しておいて良かったということかな? https://t.co/qVbuycaTui
— 徳丸 浩 (@ockeghem) 2023年4月14日
概要
- 8bit文字コードの
0x5C
(0101 1100)は多くの場合で\
(バックスラッシュ)を示す文字コードとして利用される - 多くの場合
\
はエスケープ文字として使われる。 - Shift−JISは文字列を16bitで表す文字コードで、下位8bitに
0x5c
が登場する文字がいくつかある(ソ
は0x835c
なので下位ビットが5c) - そのため2バイトの情報をコンパイラが解釈するときに
\
と判断されて誤った解釈をされてしまうことがあり、その結果意図しない挙動が起きる
UTF-8だとどうなのか
Shift-JISの場合だ下位ビットが0x5cのものが登場するが、2023年現在でメジャーなUTF-8はどうかというと意図的に登場しないようになっている
U+0000からU+007Fの範囲の文字を0x00から0x7Fの1バイトで表現しているため、US-ASCIIと互換性がある、バイト列の途中からでも文字の先頭バイトを簡単に検出できる、多バイト文字の途中に0x00や0x5C(\)、0x2F(/)などが現れない、などの特徴があります。 - 第4回 UTF-8の冗長なエンコード | gihyo.jp