多バイト

多バイト符号

[1] 多バイト符号は、 複数バイトで構成される符号です。

[2] 文字コードについて言うときは、シフトJIS型の符号を指すことが多いです。 より広い意味で、多バイトで表される任意の文字コードを指すこともあります。

[3] シフトJIS型符号

[11] 関連: 94n集合, フォント依存符号化

[4] シフトJIS符号は第1バイトが特定の値だと第2バイトが続く、 1バイトと2バイトの混合符号です。 (3バイト以上の符号も持つものもあります。) 具体的には各項を参照。

[12] 多バイト符号でも UTF-8UTF-16 のようなものは多バイト符号に入れたり入れなかったりします。 入れない方が多いでしょうか。

[13] 多バイトになることがある符号でも、 文字合成に関するものやインド系文字の文字コードなど、 基本単位が1バイト符号多バイト符号に入れません。


[5] 文字列を構成するある特定のバイトを取り出した時、 それが1バイト符号のように見えても、 2バイト符号の第2バイトであることがあります。

[6] 1バイト符号に特別な意味が割り当てられていて、 多バイト符号の第2バイトがたまたまその符号と一致するとき、 意図せぬ現象が起こることがあります。 そのような符号化文字日本IT業界俗語ダメ文字といいます。

[7] 例えば 0x5C (\) がエスケープの意味を持つ C言語の実装で使うプログラムに第2バイトが 0x5C になる2バイト文字 (例えばシフトJISの「表」) が混じると困ったことになります。 関連するようでしないようでする問題: 円問題

printf("表\示\n")

[8] 今ではダメ文字現象はまずないので、こんな言葉をまだ使っている人達は老人会か、 よほど特殊な業界 (古いシステムをメンテナンスし続けている人々など) です。

[9] しかし似たような話は今でもあります。 国旗絵文字

[14] :: Shift-JISの文字化けについて | KENT-WEB ::, https://www.kent-web.com/pubc/garble.html

[17] CGIで特定の文字(表・予・申・能など)が文字化けする, , https://www.shtml.jp/mojibake/sjis_cgi.html


[10] OpenType cmap には format 2 があります。