Java のサポートされているエンコーディングの一覧を見ていると、UTF-16, UTF-16BE, UTF-16LE, x-UTF-16LE-BOM とあって、なにが違うんだろうと思って調べてみました。
まとめると、読み・書き時のバイトオーダー (BO) 1 と書き込み時の BOM (Byte Order Mark) の違いでした。
- 読み込み時のバイトオーダー
- BE / LE が付かないものは、BOM から自動的に判定
- 書き込み時のバイトオーダー
- BE / LE が付かないものは、BIG バイトオーダー
- BOM の有無
| 名称 | 読み込み時 バイトオーダー |
書き込み時 バイトオーダー |
書き込み時 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 |