(この記事は 地平線に行く とのマルチポストです)
Java のサポートされているエンコーディングの一覧を見ていると、UTF-16
, UTF-16BE
, UTF-16LE
, x-UTF-16LE-BOM
とあって、なにが違うんだろうと思って調べてみました。
まとめると、読み・書き時のバイトオーダー (BO) 1 と書き込み時の BOM (Byte Order Mark) の違いでした。
- 読み込み時のバイトオーダー
- BE / LE が付かないものは、BOM から自動的に判定
- 書き込み時のバイトオーダー
- BE / LE が付かないものは、BIG バイトオーダー
- BOM の有無
- UTF-8 に「BOM あり」で書き込むものはない2
名称 | 読み込み時 バイトオーダー |
書き込み時 バイトオーダー |
書き込み時 BOM |
---|---|---|---|
UTF-8 | - | - | x |
UTF-16 | AUTO | BIG | o |
UTF-16BE | BIG | BIG | x |
UTF-16LE | LITTLE | LITTLE | x |
x-UTF-16LE-BOM | AUTO | LITTLE | o |
UTF-32 | AUTO | BIG | x |
UTF-32BE | BIG | BIG | x |
X-UTF-32BE-BOM | BIG | BIG | o |
UTF-32LE | LITTLE | LITTLE | x |
X-UTF-32LE-BOM | LITTLE | LITTLE | o |