Ошибка чтения файла UTF-8 в Java - PullRequest
2 голосов
/ 25 июля 2010

Я пытаюсь прочитать некоторые предложения из файла, который содержит символы Юникода.Он выводит строку, но по какой-то причине портит символы Юникода

Вот мой код:

public static String readSentence(String resourceName) {

    String sentence = null;
    try {
        InputStream refStream = ClassLoader
                .getSystemResourceAsStream(resourceName);
        BufferedReader br = new BufferedReader(new InputStreamReader(
                refStream, Charset.forName("UTF-8")));
        sentence = br.readLine();
    } catch (IOException e) {
        throw new RuntimeException("Cannot read sentence: " + resourceName);
    }
    return sentence.trim();
}

Ответы [ 3 ]

2 голосов
/ 25 июля 2010

Возможно, проблема в том, что строка выводится.

Я предлагаю вам подтвердить, что вы правильно читаете символы Юникода, выполнив что-то вроде этого:

for (char c : sentence.toCharArray()) {
    System.err.println("char '" + ch + "' is unicode codepoint " + ((int) ch)));
}

и посмотрите, правильны ли кодовые точки Unicode для испорченных символов.Если они верны, то проблема в выходной стороне: если нет, то в входной.

1 голос
/ 25 июля 2010

Одной из самых раздражающих причин могут быть ... ваши настройки IDE.

Если ваша консольная кодировка IDE по умолчанию похожа на latin1, вы будете очень долго бороться с различными вариациями кода Java, но ничто не поможет, если вы правильно установите некоторые параметры IDE.

1 голос
/ 25 июля 2010

Во-первых, вы можете создать InputStreamReader как

new InputStreamReader(refStream, "UTF-8")

Кроме того, вы должны проверить, действительно ли ресурс содержит содержимое UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...