Способ, которым он должен работать, заключается в том, что если кто-то дает вам файл и говорит, что это UTF-16, они ожидают, что вы изучите первые два байта (BOM), чтобы выяснить, является ли он прямым или младшим порядковым номером. Но если вам сообщают, что кодировка UTF-16LE , это означает, что спецификации нет; вам это не нужно, потому что они уже сказали вам, что порядок байтов в порядке байтов. Java точно следует этим правилам, что является настоящим недостатком, потому что никто другой этого не делает.
Нативной кодировкой символов современных операционных систем Windows является UTF-16, little-endian. К сожалению, отдельные программы кажутся непоследовательными в том, что касается порядка следования байтов. И вы не можете просто использовать UTF-16LE все время, потому что, если спецификация там , она будет передана как ненужный символ. Единственный способ узнать заранее, использовать ли UTF-16 или UTF-16LE, - это исследовать первые два байта, как описал Макдауэлл.