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 этим, тогда у меня есть правильные умляуты в файле свойств сообщения.
Ответы
Ответ 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
?