Как поместить файл UTF-16 в поток UTF-8? - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть XML-файл, который я пытаюсь проанализировать, и он в кодировке UTF-16. Я хотел бы преобразовать его в UTF-8, чтобы поместить в документ.

Когда я открываю файл в vi, я вижу что-то вроде <^ @ t ^ @ a ^ @ g ^ @> ^ @

Это код, который я думал, будет работать:

InputStream in = _context.openFileInput(_fileName);
InputSource is = new InputSource(new InputStreamReader(in, "UTF-8"));
is.setEncoding("UTF-8");
doc = builder.parse(is);

Это не работает правильно, нераспознанные символы все еще остаются после того, как они переданы в строку.

Кроме того, я получаю ошибку при попытке разбора документа:

org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@1:1 in java.io.InputStreamReader@4059c510) 

1 Ответ

3 голосов
/ 18 февраля 2012

Когда вы читаете файл, кодировка становится неактуальной, пока вы не решите записать его обратно в текст (или преобразовать в байты), поскольку он будет правильно представлен в JVM после чтения.Так что-то вроде этого должно работать:

InputSource is = new InputSource(new InputStreamReader(in, "UTF-16"));

И вам не нужно устанавливать никакую другую кодировку, пока вы не попытаетесь сохранить данные.

...