Eclipse Java импортирует странные нееврейские символы вместо иврита в файле - проблема с кодировкой?

Я пытаюсь импортировать текстовый файл .dat, включая иврит и английские символы в java-программу с использованием Eclipse Neon 4.6.0:

String[] getFile(String path) throws IOException
{
    BufferedReader in = new BufferedReader(new InputStreamReader(this.getClass().getResource("../../../t3utf.dat").openStream()));
    String l;
    String[] dataFile = new String[23213]; //Does java have push and pop or auto expanding lists?
    int c = 0;
    while ((l = in.readLine()) != null) {
        dataFile[c] = l;
        c++;
    }
    return dataFile;
}

По какой-то причине символы иврита заменяются случайной тарабарщиной:

Оригинал: gen|1|1|בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃

Когда программа запускается один раз, все символы иврита заменяются тарабарщиной:

Новое: gen|1|1|בְּרֵ×ש×ִ֖ית ×‘Ö¼Ö¸×¨Ö¸Ö£× ×Ö±×œÖ¹×”Ö´Ö‘×™× ×ֵ֥תהַש×Ö¼Ö¸×žÖ·Ö–×™Ö´× ×•Ö°×ֵ֥ת ×”Ö¸×ָֽרֶץ׃

На самом деле сам файл меняется на тарабарщину - при просмотре в блокноте после запуска программы символы как-то изменились.

У меня была версия моей программы, работающей на Android в AIDE, которая работала и не имела этой проблемы. Является ли Eclipse ненужным форсированием конкретной бесполезной кодировки?


person Menasheh    schedule 14.09.2016    source источник
comment
Проверьте кодировку вывода вашего терминала.   -  person chrylis -cautiouslyoptimistic-    schedule 15.09.2016
comment
Как вы читаете файл? Вы указали набор символов? Старые устройства чтения/записи на основе File по умолчанию используют набор символов JVM по умолчанию, а новые устройства чтения/записи на основе Path по умолчанию используют UTF-8. Какова фактическая кодировка самого файла input? Какую кодировку вы хотите использовать в файле output?   -  person Andreas    schedule 15.09.2016
comment
Используйте конструктор InputStreamReader, который принимает явный набор символов и использует соответствующий набор символов для рассматриваемого файла.   -  person Thorbjørn Ravn Andersen    schedule 15.09.2016
comment
@ ThorbjørnRavnAndersen Есть ли у этого преимущества перед изменением кодировки проекта? В чем преимущество значения по умолчанию Cp1252?   -  person Menasheh    schedule 15.09.2016
comment
Зависит от того, как вы работаете. Явная установка кодировки в вашем коде делает его более надежным на других платформах и машинах. Только для вас выберите любой подход, который вам проще всего.   -  person Thorbjørn Ravn Andersen    schedule 15.09.2016
comment
Вы можете использовать ArrayList вместо массива фиксированного размера.   -  person dan04    schedule 16.09.2016


Ответы (1)


Согласно этому ответу, вам необходимо установить кодировку проекта в UTF-8. Лучший способ сделать это, если вы будете работать над другими проектами, использующими символы иврита, — изменить кодировку для вашего рабочего пространства:

  1. Перейти к Window Menu -> Preferences -> General -> Workspace

2.: Настройка кодировки UTF-8 в левом нижнем углу

Это позволит вашей программе загружать символы иврита, поскольку кодировка UTF-8 включает символы иврита.

person Menasheh    schedule 14.09.2016