コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

0x5c問題についてざっとまとめる

「ダメ文字」とも言われるこの問題そのものを認識していなかったので知識としてまとめる。

元ネタ

概要

  • 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

関連リンク