Как читать Excel, в котором есть столбцы араби c - PullRequest
1 голос
/ 28 марта 2020

при чтении таблицы Excel столбцы Араби c отображаются как ???? Остальные столбцы engli sh отображаются нормально. Я думаю, что проблема UTF-8, я не знаю, где я что-то пропустил. пожалуйста, сделайте счастливую помощь

     FileInputStream fis = new FileInputStream(fileName);
    Workbook workbook = new XSSFWorkbook(fis);

System.out.println("Current Encoding " +
                    "::" + System.getProperty("file.encoding"));

даже после изменения ниже указанного я получаю Текущее кодирование :: Cp1252

netbeans 8.0.2

-J-Dfile.encoding=UTF-8 добавлено в netbeans_default_options

jsp (стойки 1.3)

  <%@page pageEncoding="UTF-8"%>

     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

     <html:form action="/uploadApplicantAction"  method="post" acceptCharset="utf-8" 
    enctype="multipart/form-data">

tomcat 8

без комментариев в сети. xml

<filter>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <async-supported>true</async-supported>
</filter>

<filter-mapping>
    <filter-name>setCharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

добавлен код utf-8 на сервере Tomcat. xml

<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
               connectionTimeout="20000"
               redirectPort="8443" />

1 Ответ

3 голосов
/ 29 марта 2020

Так как только ваш арабский 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 :

ArabicTextInNetBeans

Если у вас есть тривиальное приложение, корректно отображающее текст Arabi c при редактировании и вывод windows в NetBeans, измените ваше приложение, используя тот же шрифт (ы). ).

После этого текст вашего приложения на арабском c должен правильно отображаться при обработке файлов Excel. Если нет, то, по крайней мере, вы удалили шрифт как потенциальную причину проблемы, поэтому обновите свой вопрос соответствующим образом.

Примечания

  1. Возможно, вы не захотите / не хотите изменять шрифт в окне редактирования. Я только что упомянул это для полноты.
  2. Вы не должны устанавливать -Dfile.encoding=UTF-8. Из отчета об ошибках Java в 2005 году :

    Свойство "file.encoding" не требуется спецификацией платформы J2SE; это внутренняя деталь реализаций Sun, и не должен проверяться или изменяться кодом пользователя . Он также предназначен только для чтения; технически невозможно поддерживать установку этого свойства в произвольные значения в командной строке или в любое другое время во время выполнения программы.

    Предпочтительный способ изменить используемую кодировку по умолчанию виртуальной машиной и системой времени выполнения необходимо изменить языковой стандарт базовой платформы перед запуском вашей программы Java.

  3. На основе предоставленного вами кода и сведений о конфигурации в вопросе «UTF-8» устанавливается в шести разных местах. После того, как приложение заработало, возможно, стоит потратить время на его постепенное удаление, чтобы узнать, какие из этих параметров важны, а какие нет.

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