Исходя из того, что я собрал из комментариев и из моего собственного опыта, это, скорее всего, не проблема для самого Log4j
. Я разместил комментарий, указывающий только на это:
Что именно вы имеете в виду под файлом Log4j? Это обычный текстовый файл журнала, на который указывает FileAppender? Потому что я пытался напечатать текст на иврите прямо сейчас, и все работает отлично. Я считаю, что это не проблема Log4j и может быть связана с вашим читателем текста.
Другие комментарии подтвердили их подозрение, что эта проблема может возникнуть у вашего читателя. Я смог воспроизвести вашу проблему, выполнив в Notepad++
следующие действия:
- Открыть новую вкладку в блокноте ++.
- Скопируйте и вставьте образец текст, содержащий буквы на иврите.
Language -> Convert to ANSI
Текст перед преобразованием:
See also: אלף־בית and אַלף־בית
Текст после преобразования:
See also: ???????? and ?????????
Основываясь на предоставленном вами коде (при условии, что нет неявных махинаций, о которых мы не знаем за кадром) мы можем окончательно заключить, что вы либо пишете в файл, для которого установлена кодировка ANSI
где все ваши специальные символы преобразуются в вопросительные знаки, потому что они не могут быть декодированы или ваши символы читаются как UTF-8
, а просто отображаются как ANSI
.
ANSI и UTF-8 оба являются форматами кодирования. ANSI - это общий однобайтовый формат, используемый для кодирования латинского алфавита; тогда как UTF-8 - это формат Unicode переменной длины (от 1 до 4 байтов), который может кодировать все возможные символы.
Я бы порекомендовал следующие шаги:
Перейдите к Settings -> Preferences -> New Document -> Encoding
и убедитесь, что выбрана опция UTF-8 (Apply to opened ANSI files)
.
Закройте все ваши файлы, открытые в данный момент в Notepad++
, и удалите файл журнала. Убедитесь, что вы на самом деле закрываете файлы, а не просто закрываете Notepad++
. Это должно очистить записи файла из кэша и позволить вам снова открыть их с другой кодировкой.
Запустите приложение Java и позвольте Log4j
напечатать в файл.
Откройте файл с помощью Notepad++
и проверьте, что вы кодируете в UTF-8
, нажав на вкладку Encoding
. Если параметр не установлен на UTF-8
, измените его.
Если ничего из вышеперечисленного не помогло, пожалуйста, оставьте дополнительную информацию в комментариях.
К сожалению, я не очень хорошо разбираюсь в вопросах кодирования, и мне пришлось искать какие-то вещи в процессе написания этого, поэтому я не могу помочь вам так сильно, как хотел бы. Однако в дополнение к описанным выше шагам я могу направить вас по следующим ссылкам, которые должны дать вам дополнительные знания и (следовательно) более глубокое понимание вашей проблемы: