У меня есть два вопроса:
В StackOverflow вы должны разделить это на два разных вопроса ...
Я отвечу на ваш второй вопрос:
Есть ли способ, которым мы можем конвертировать файл UTF-16LE в UTF-8, используя Java?
Да, конечно.И есть несколько способов.
Обычно вы хотите прочитать входной файл, указав кодировку ввода (UTF-16LE), а затем записать файл, указав кодировку вывода (UTF-8).
Скажем, у вас есть какой-то файл в кодировке UTF-16LE:
... $ file testInput.txt
testInput.txt: Little-endian UTF-16 Unicode character data
В таком случае вы можете сделать что-то подобное в Java (это всего лишь пример: вы захотите заполнить пропущенный код обработки исключений, а может и нет).поместите последний символ новой строки в конце, возможно, отмените спецификацию, если таковая имеется, и т. д.):
FileInputStream fis = new FileInputStream(new File("/home/.../testInput.txt") );
InputStreamReader isr = new InputStreamReader( fis, Charset.forName("UTF-16LE") );
BufferedReader br = new BufferedReader( isr );
FileOutputStream fos = new FileOutputStream(new File("/home/.../testOutput.txt"));
OutputStreamWriter osw = new OutputStreamWriter( fos, Charset.forName("UTF-8") );
BufferedWriter bw = new BufferedWriter( osw );
String line = null;
while ( (line = br.readLine()) != null ) {
bw.write(line);
bw.newLine(); // will add an unnecessary newline at the end of your file, fix this
}
bw.flush();
// take care of closing the streams here etc.
Это создаст файл в кодировке UTF-8.
$ file testOutput.txt
testOutput.txt: UTF-8 Unicode (with BOM) text
Спецификация можетотчетливо видно, например, с помощью hexdump :
$ hexdump testOutput.txt -C
00000000 ef bb bf ... (snip)
Спецификация кодируется в трех байтах в UTF-8 (ef bb fb), а в двух байтах в UTF-16.В UTF16-LE спецификация выглядит следующим образом:
$ hexdump testInput.txt -C
00000000 ff fe ... (snip)
Обратите внимание, что файлы в кодировке UTF-8 могут иметь или не иметь (оба полностью действительны) иметь «спецификацию» (маску порядка байтов).Спецификация в файле UTF-8 не так уж и глупа: вас не заботит порядок следования байтов, но это может помочь быстро идентифицировать текстовый файл как кодированный в UTF-8.Файлы UTF-8 с спецификацией являются полностью законными в соответствии со спецификациями Unicode, и, следовательно, читатели, неспособные работать с файлами UTF-8, начинающимися с спецификации, не работают.Просто и просто.
Если по какой-либо причине вы работаете со сломанными считывателями UTF-8, которые не могут справиться с спецификациями, вы можете удалить спецификацию из первой строки перед записью на диск.
Больше информации о спецификациях здесь:
http://unicode.org/faq/utf_bom.html