Так как только ваш арабский c текст отображается как задний вопросительный знак, кажется вероятным, что:
- Нет ничего плохого в том, как вы читаете файлы. Я не думаю, что ваше предположение, что это может быть " utf-8, проблема ", вероятно, так как текст на Engli sh отображается правильно. Если бы возникла проблема с кодированием / декодированием, вы, вероятно, увидели бы заменяющих символов в выходных данных.
- Наиболее вероятная причина вашей проблемы заключается в том, что используемый вами для вывода шрифт не support Arabi c.
Чтобы проверить это, тривиально создать простое приложение Java, которое выводит некоторый текст Arabi c на консоль:
package arabicdemo;
public class ArabicDemo {
public static void main(String[] args) {
// Use a font which supports Arabic, such as DejaVu Sans, Courier New or MS Arial Unicode.
// - To set font in edit window: Tools > Options > Fonts & Colors > Syntax tab > Font
// - To set font in Ouput window: Tools > Options > Miscellaneous > Output tab > Font
System.out.println("مرحبا بالعالم"); // "Hello world" in Arabic
}
}
Обязательно используйте соответствующий шрифт (ы), как описано в комментарии к примеру кода (поскольку вы используете NetBeans). Вот снимок экрана того приложения, которое запускается в NetBeans, с шрифтом окна редактирования, установленным на Deja Vu Sans , и шрифтом окна вывода, установленным на Courier New :
Если у вас есть тривиальное приложение, корректно отображающее текст Arabi c при редактировании и вывод windows в NetBeans, измените ваше приложение, используя тот же шрифт (ы). ).
После этого текст вашего приложения на арабском c должен правильно отображаться при обработке файлов Excel. Если нет, то, по крайней мере, вы удалили шрифт как потенциальную причину проблемы, поэтому обновите свой вопрос соответствующим образом.
Примечания
- Возможно, вы не захотите / не хотите изменять шрифт в окне редактирования. Я только что упомянул это для полноты.
Вы не должны устанавливать -Dfile.encoding=UTF-8
. Из отчета об ошибках Java в 2005 году :
Свойство "file.encoding" не требуется спецификацией платформы J2SE; это внутренняя деталь реализаций Sun, и не должен проверяться или изменяться кодом пользователя . Он также предназначен только для чтения; технически невозможно поддерживать установку этого свойства в произвольные значения в командной строке или в любое другое время во время выполнения программы.
Предпочтительный способ изменить используемую кодировку по умолчанию виртуальной машиной и системой времени выполнения необходимо изменить языковой стандарт базовой платформы перед запуском вашей программы Java.
На основе предоставленного вами кода и сведений о конфигурации в вопросе «UTF-8» устанавливается в шести разных местах. После того, как приложение заработало, возможно, стоит потратить время на его постепенное удаление, чтобы узнать, какие из этих параметров важны, а какие нет.