Escape - символ при чтении из свойств Java - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь прочитать - значение из файла свойств Java, но он продолжает давать мне значение - и что-то вроде эпсилона (возникают проблемы с его вставкой)

У меня нет проблем с выходом из ", но кажется, что независимо от того, что я делаю, - это вызывает у меня проблемы. Я пробовал" - "и \ - и \\ - но, похоже, ничего не работает.

@Test
public void readFromProperties() throws IOException {
    Properties options = new Properties();

    FileInputStream in = new FileInputStream(Configs.optionsFi);
    negComments.load(in);
    in.close();

    String option = options.getProperty("OPTION8");
    System.out.println(negComment);
}

файл свойств:

OPTION8=asdf asdf asdf asdf asdf – \"asdfasdf\"

Результат System.out.println:

asdf asdf asdf asdf asdf âepsilonlikething "asdfasdf"

1 Ответ

0 голосов
/ 31 августа 2018

Символ в файле свойств не является обычной чертой ( 'HYPHEN-MINUS' (U + 002D) ), но 'EN DASH' (U + 2013) .

Документация load(InputStream inStream) явно указывает:

Входной поток имеет простой линейно-ориентированный формат, как указано в load (Reader), и предполагается, что используется кодировка символов ISO 8859-1 ; то есть каждый байт является одним символом Latin1.

Ваш файл свойств находится в UTF-8, поэтому вы получаете эту ошибку кодировки символов.

Существует 3 способа решения проблемы:

  1. Предполагая, что вы намеревались использовать нормальную черту, замените на -,
    и убедитесь, что вы сохраняете файл в ISO 8859-1, также известный как Latin1 или Windows-1252.

  2. Кодировать символ, т.е. заменить на \u2013,
    и убедитесь, что вы сохраняете файл в ISO 8859-1, также известный как Latin1 или Windows-1252.

  3. Считайте файл, используя UTF-8:

    try (BufferedReader in = Files.newBufferedReader(Paths.get(Configs.optionsFi))) {
        options.load(in);
    }
    
...