[10] 
[[20世紀]]頃は[[文字]]と[[バイト]]の区別が明確になされないことが多くありました。
[SEE[ [[文字]], [[バイト]], [[オクテット]], [[バイト列]], [[文字列]] ]]


[3] 歴史的に[[オクテット列]]/[[バイト列]]と[[文字列]]は同義または類義と考えられていた場面もありますが、
本来両者は別のものです。

* バイトと文字の曖昧な世界

[6] 近年の[[プログラミング言語]]やデータ交換形式などでは[[バイト列]]と[[文字列]]を区別するケースが増えていますが、
かつては同一視するのが一般的でした。
[SEE[ [[文字のようなもの]] ]]


[SEE[ [[[CODE[char]]型]], [[非SGMLデータ実体]] ]]

[EG[
[7] 例えば[[C言語]]では普通 [CODE[[[char]]]] [[型]]は8ビットの[[符号無し整数]]を表しますが、
[[文字]]1つを表すためにも使われています。
]EG]

[EG[
[9] [[Perl]] には [[utf8フラグ]]のある[[文字列]]と、ない[[バイト列]]があります。
ただし両者間は[[暗黙の型変換]]があり、 0x00-0xFF の範囲では両者の区別が曖昧です。
]EG]


[35] 
[[中華人民共和国]]では[[バイト]]が[[字节]]と訳されています。
[SEE[ [[バイト]] ]]

[12] 
[[Unix]] 世界では通常[[ファイル名]]は[[バイト列]]です。
[SEE[ [[ファイル名の文字コード]] ]]

* 文字として表されるバイト


[FIG(short list)[ [10] [[文字]]の世界で[[バイト]]を表す

- [[同型符号化]], [[同型復号]]
- [CODE[utf8::upgrade]]
- [[surrogateescape]]
- [CODE[x-user-defined]]
- [[フォント依存文字符号化]]
- [[symbol encoding]]
- [[escape]]
- [[UTF-8符号化されたバイト列]]
- [[文字として符号化された文字やバイト]]
- [[ISO/IEC 10646におけるエスケープシーケンス]]
- [[制御文字]]

]FIG]

[8] [[JavaScript]] には長らく[[文字列]]の[[型]] [CODE(JS)@en[[[String]]]] しかありませんでしたが、
[[ES6]] で[[バイト列]]のための [[TypedArray]] が追加されました。
それまでは[[文字列]]として[[バイト列]]を扱うことがありました。
[SEE[ [[TypedArray]], [[JavaScriptにおけるバイナリーデータ]] ]]

-
[4] [[atob]]/[[btoa]] では、 [[U+0000]]-[[U+00FF]] が使われています。
([[同型符号化]]・[[同型復号]])
-
[1] [[x-user-defined]] では、[[U+0000]]-[[U+007F]] と [[U+F780]]-[[U+F7FF]] が使われています。

[2] 
[CITE[Emacs]] には[[文字コード]]体系を表す [[coding system]]
として、
[[ASCII]] + 8ビットデータに使える [CODE[raw-text]]
と[[バイナリーデータ]]に使える [CODE[no-conversion]]
があります。
[[バイト]]は[[内部符号][Mule内部符号]]において他の[[文字]]と区別して表現されます。
[SEE[ [[Emacsにおける文字コード]] ]]

[5] 
[[Ruby]] には[[ASCII互換オクテット列]]を表す[[文字列]]の[[エンコーディング]]
[CODE[ASCII-8BIT]]
があります。

[11] 
[[バイト列]]を表すために [[ISO-8859-1]] が流用されることがしばしばあります。
[[Python]] ではしばしばこのために [CODE[latin-1]] が用いられます。

[17] 
[[MySQL]] / [[MariaDB]] には [CODE[[[CHARSET]]=[[BINARY]]]] があります。
[CODE[CHAR]] や [CODE[TEXT]] が [CODE[BINARY]]
だと
[CODE[BINARY]] や [CODE[BLOB]] と同じように扱われます。


[16] 
[[IANA charset]] には不明な[[8ビット符号]]の[[文字列]]を表す
[CODE[unknown-8bit]]
があります。


[18] 
[[RFC 4790]]
は[[照合順序]]を定めるものですが、ここでいう[[照合順序]]は[[バイト列]]に対して定義された[[文字コード]]と[[比較]]・[[整列]]を包含する概念であり、
[CODE[i;octet]]
のような[[バイト列]]としての[[比較]]がその一種として定義されています。



[26] 
[[URL]] の[[パーセント符号化]]のように、[[文字列]]の中に [[escape]] として
([[文字]]を [[escape]] したものではなく) [[バイト]]を埋め込む形のものがあります。

* 文字列として区別されるバイト列の文字符号化

[19] 
[[バイナリー]]系[[データ形式]]が[[テキスト]]系[[データ形式]]と構文の一部を共有し、
[[文字コード]]の指定のかわりに[[バイナリー]]系の記述を認めていることがあります。

[21] 
[[VRML 3.0]] バイナリー符号化ファイルの仕様案では [CODE[utf8]] のかわりに
[CODE[binary]] なる値を指定できるとしていました。
[SEE[ [CODE[#VRML]] ]]

[20] [[Fast Infoset]] は、 [[XML宣言]]の [CODE[encoding=""]]
に [CODE[finf]] という値を使います。


-*-*-

[13] [[文字コードの判定]]の処理は、便宜上、
入力が[[バイナリーデータ]]であると判定することがあります。
[CODE[null]] などでそれを表すこともありますが、
専用の[[文字符号化]]のようなものとして表すこともあります。

[15] 
[CITE[[CODE[compact_enc_det]]]]
は、
[CODE[BINARYENC]], [CODE[X-BINARYENC]], [CODE[binary]]
という値で[[バイナリーデータ]]を表しています。
[SRC[>>14]]

[REFS[

- [14] 
[CITE@en[compact_enc_det/compact_enc_det/compact_enc_det_unittest.cc at master · google/compact_enc_det · GitHub]], [TIME[2025-11-06T10:02:47.000Z]] <https://github.com/google/compact_enc_det/blob/master/compact_enc_det/compact_enc_det_unittest.cc>

]REFS]




* 関連

[SEE[ [[8ビット安全]] ]]

* メモ
