Подтвердить что ты не робот

Eclipse неправильные свойства Java UTF-8 кодирование

У меня есть проект JavaEE, в котором я использую файлы свойств сообщений. Кодировка этого файла установлена ​​в UTF-8. В файле я использую немецкие умляуты, например ä, ö, ü. Проблема в том, что иногда эти символы заменяются на unicode, например \uFFFD\uFFFD, но не для каждого символа. Теперь у меня есть случай, когда ä и ü заменяются на \uFFFD\uFFFD, но не для каждого появления ä и ü.

Git diff показывает мне что-то вроде этого:

 mail.adresses=E-Mail hinzufügen:
-mail.adresses.multiple=E-Mails durch Kommata getrennt hinzufügen.
+mail.adresses.multiple=E-Mails durch Kommata getrennt hinzuf\uFFFD\uFFFDgen.
 mail.title=Einladungs-E-Mail
 box.preview=Vorschau
 box.share.text=Sie können jetzt die ausgewählten Bilder mit Ihren Freunden teilen.
@@ -6880,7 +6880,7 @@ browser.cancel=Abbrechen
 browser.selectImage=übernehmen
 browser.starImage=merken
 browser.removeImage=Löschen
-browser.searchForSimilarImages=ähnliche
+browser.searchForSimilarImages=\uFFFD\uFFFDhnliche
 browser.clear_drop_box=löschen

Также есть строки, которые я не коснулся. Я не понимаю, почему у меня такое поведение. Что может быть причиной вышеуказанной проблемы?

Моя система:

  • Antergos/Arch Linux

    • Системная кодировка UTF-8

      Python 3.5.0 (default, Sep 20 2015, 11:28:25) 
      [GCC 5.2.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import sys
      >>> sys.getdefaultencoding()
      'utf-8'
      
  • Eclipse Mars 1

    • Текстовое кодирование UTF-8 ext file encoding
    • Кодирование свойств файла UTF-8 Кодирование файлов свойств
  • Tomcat 8
  • Java JDK 8

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

Я также понял в случае, если я скопирую исходное значение browser.searchForSimilarImages=ähnliche из Git diff и заменим неправильное значение browser.searchForSimilarImages=\uFFFD\uFFFDhnliche в Eclipse этим, тогда у меня есть правильные умляуты в файле свойств сообщения.

4b9b3361

Ответ 1

Корневая причина:

По умолчанию кодировка символов ISO 8859-1 используется для файла свойств Eclipse (читайте здесь), поэтому, если файл содержит любой символ за пределами ISO 8859-1, то он не будет обработан, как ожидалось.

Решение 1

Если вы используете Eclipse, вы заметите, что он неявно преобразует специальный символ в эквивалент \uXXXX. Попробуйте скопировать

会意 字/會意 字

в файл свойств, открытый в Eclipse.

РЕДАКТИРОВАТЬ: В соответствии с комментарием OP

Обновите кодировку вашего Eclipse, как показано ниже. Если вы установите кодировку как UTF-32, тогда даже вы можете увидеть китайский символ, который вы не видите вообще.

Как изменить Кодирование файла свойств в Eclipse: См. this Ошибка Eclipse Bugzilla для более подробной информации, в которой говорится о нескольких других возможностях и, в конце концов, о том, что я подчеркнул ниже. enter image description here

Китайские символы можно увидеть в Eclipse после правильной установки кодировки: enter image description here

Решение 2

Если выше не работает последовательно для вас (это работает для меня, и я никогда не вижу проблемы с кодировкой), попробуйте это с помощью некоторого плагина Eclipse, который обрабатывает кодирование свойств или других файлов. Например Eclipse ResourceBundle Editor или расширенный редактор ресурсов-ресурсов

Я бы рекомендовал использовать Eclipse ResourceBundle Editor.

Решение 3

Другая возможность изменить кодировку файла - это использовать параметр Edit --> Set Encoding. Это действительно важно, потому что он изменяет набор символов по умолчанию и кодировку файлов. Поиграйте с помощью изменения кодировки с помощью параметра Edit --> Set Encoding и выполните следующие действия: sysout System.out.println("Default Charset=" + Charset.defaultCharset()); и System.out.println(System.getProperty("file.encoding"));

введите описание изображения здесь


В стороне: 1

Обработать файл свойств, содержащий контент с кодировкой символов ISO 8859-1, с помощью native2ascii - Конвертер Native-ASCII

Что делает native2ascii: он преобразует все символы, отличные от ISO 8859-1, в их эквивалент \uXXXX. Это хороший инструмент, потому что вам не нужно искать эквивалент \uXXXX специального символа.

Использование для UTF-8: native2ascii -encoding utf8 e:\a.txt e:\b.txt


В стороне: 2

Каждая компьютерная программа, будь то среда IDE, сервер приложений, веб-сервер, браузер и т.д., понимает только биты, поэтому ему необходимо знать, как интерпретировать биты, чтобы сделать ожидаемый смысл, потому что в зависимости от используемой кодировки одни и те же биты могут представляют разные символы. И что там, где "Кодирование" входит в картину, предоставляя уникальный идентификатор для представления символа, чтобы все компьютерные программы, различные ОС и т.д. знали точно правильный способ их интерпретации.

Итак, если вы записали файл с использованием какой-либо схемы кодирования, скажем, UTF-8, а затем прочитав с помощью любого редактора, но работая с схемой кодирования как UTF-8, вы можете ожидать получения правильного отображения.

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

Ответ 2

Свойства файлов ожидается ISO-8859-1 (лат. -1). Скорее всего, это то, что затмение было установлено по умолчанию.

Вы должны убедиться, что каждый инструмент, который запускается в сборке или что-то не учитывает спецификацию и использует UTF-8.

Ответ 3

Добавьте в свой файл eclipse.ini следующие аргументы.

-Dclient.encoding.override=UTF-8
-Dfile.encoding=UTF-8

По умолчанию Eclipse использует формат кодировки, полученный виртуальной машиной Java (JVM). Кроме того, вы можете установить кодировку файла utf-8.

Ответ 4

Это выглядит как смесь Eclipse и git кодировки или, скорее, не кодирование.

Git использует необработанные байты и не заботится о кодировании. Используя git diff, вы можете получить символы, как показано здесь. Пример: R<C3><BC>ckg<C3><A4>ngig # should be "Rückgängig".

Как вы можете видеть там две забавные фигурные скобки, показанные на умлауте. И в вашем редакторе всегда есть два \uFFFD для каждого умляута в строках, начинающихся с +.

Поэтому я предполагаю, что ваш редактор UTF-8 пытается интерпретировать нотацию git и терпит неудачу. Это, в свою очередь, приводит к представлению \uFFFD, которое в основном означает, что это символ, значение которого неизвестно или непредставимо (см. Здесь).

Как показано в первой ссылке, вы можете попробовать установить LESSCHARSET=UTF-8 в свою переменную среды (Windows). Хм, в Linux он должен быть в etc/profile?