Кодирование знака фунта - PullRequest
       61

Кодирование знака фунта

0 голосов
/ 05 августа 2020

У нас есть приложение, которое правильно выводит знак £ (фунт), когда приложение запущено на Ma c, но выводит? (знак вопроса) при запуске на тестовом сервере.

Ниже приведен образец кода и сгенерированные выходные данные

    LOGGER.debug(" TESTING  file.encoding=" + System.getProperty("file.encoding"));
    LOGGER.debug(" TESTING Charset.defaultCharset=" + Charset.defaultCharset());
    try {
        LOGGER.debug(" TESTING InputStreamReader.getEncoding=" + new InputStreamReader(new FileInputStream("/tmp/PrintCharSets.java")).getEncoding() );
    } catch (FileNotFoundException e) {
        e.printStackTrace();            
    }
    
    String pound = "£";
    
    LOGGER.debug(
            " TESTING - 0 - Test Character  [" + pound + "]");
    

Выходные данные на тестовом сервере

    TESTING  file.encoding=UTF-8
    TESTING Charset.defaultCharset=US-ASCII
    TESTING InputStreamReader.getEncoding=ASCII
    TESTING - 0 - Test Character  [?]

Выходные данные на моем Ma c

    TESTING  file.encoding=UTF-8
    TESTING Charset.defaultCharset=UTF-8
    TESTING InputStreamReader.getEncoding=UTF8
    TESTING - 0 - Test Character  [£]

Полагаю, это связано с кодировкой строки. Мы видим разницу в defaultCharset и кодировке. Однако не могли бы вы посоветовать, как я могу добиться правильного вывода знака £ на тестовом сервере путем внесения изменений в код.

Это приложение будет работать на разных серверах, поэтому я не могу предположить, что кодировка согласована.

1 Ответ

0 голосов
/ 05 августа 2020

Файл загружается на обе машины одинаково, как текстовый файл в кодировке UTF-8. Это означает, что одна из двух вещей различается между машинами:

  1. Содержимое файла различается
  2. На одной из машин отсутствует глиф для символа.

«Символ замены» обычно представляет собой ромб с вопросительным знаком. Однако во многих шрифтах такой символ недоступен. Если символ замены отсутствует, один вопросительный знак сам по себе является альтернативным символом замены.

Если вы копируете файл, который показывает "?" перейдите к ма c, и теперь он показывает знак фунта, проблема не в файле или кодировке, проблема в шрифте.

...