Латинские символы между строкой

У меня есть программа для чтения в файле, который содержит латинские слова, такие как "\xed". Эти латинские слова могут появляться в любом месте между любыми строками, поэтому у меня есть программа для анализа этих символов. Есть ли библиотека, которая может это сделать?

2 ответа

Простой способ, которым я часто занимаюсь, - это InputStreamReader с форматом "UTF8". Например:

         try {
            File fileDir = new File("c:/temp/sample.txt");

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                            new FileInputStream(fileDir), "UTF8"));

            String str;

            while ((str = in.readLine()) != null) {
                System.out.println(str);
            }

            in.close();
        } 
        catch (UnsupportedEncodingException e) 
        {
            System.out.println(e.getMessage());
        } 
        catch (IOException e) 
        {
            System.out.println(e.getMessage());
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }

Если вы имеете в виду, что текст в байтах, и у вас есть байт с шестнадцатеричным значением EDто интерпретация этого байта зависит от вашей кодовой страницы.

Ява хранит все Stringвнутренне в UTF-16. Это означает, что преобразование кодовой страницы почти всегда применяется при чтении и записи файла (UTF-16 не является обычной кодировкой файла).

По умолчанию Java будет использовать набор символов платформы по умолчанию. Если это не правильно, вы должны указать Charset использовать.

В качестве примера проблемы, байт ED является:

  • ISO-8859-1: í (юникода 00ED) США Windows
  • Windows-1251: н (юникода 043D) Русский
  • Кодовая страница 437: φ (юникода 03C6) Командная строка Windows для США (Win 7)

Чтобы управлять кодовой страницей, прочитайте файл следующим образом:

File file = new File("C:\\path\\to\\file.txt");
try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "ISO-8859-1"))) {
    String line;
    while ((line = in.readLine()) != null) {
        // process line here
    }
}

Или с более новым Path API:

Path path = Paths.get("C:\\path\\to\\file.txt");
try (BufferedReader in = Files.newBufferedReader(path, Charset.forName("ISO-8859-1"))) {
    String line;
    while ((line = in.readLine()) != null) {
        // process line here
    }
}
Другие вопросы по тегам