Как записать строки на иврите в файл журнала, используя log4j - PullRequest
0 голосов
/ 31 мая 2019

Как записать строку на иврите в файл log4j. Прямо сейчас я вижу ?????? в файле.

Я искал везде в Интернете, чтобы преобразовать Юникод в строку:

String abc = myStr.replaceAll("\u200F", "");
   abc = abc.replaceAll("\u200E", "");
   byte[] utf8Bytes = abc.getBytes(Charset.forName("UTF-8"));
   String value = new String(utf8Bytes);
   log.debug("value : "+ value );

Мне просто нужно записать строку на иврите в файл Log4j в удобочитаемом формате. Вот моя конфигурация:

log4j.rootLogger=debug, stdout, R log4j.logger.testlogging=DEBUG 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender     
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout     
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd} %5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender     
log4j.appender.R.File=C:\\dri\\ums.log log4j.appender.R.MaxBackupIndex=5     
log4j.appender.R.layout=org.apache.log4j.PatternLayout     
log4j.appender.R.layout.ConversionPattern= %d{dd MMM yyyy HH:mm:ss,SSS} %5p [%t] (%F:%L) - %m%n log4j.appender.FILE.encoding=UTF-8 

1 Ответ

0 голосов
/ 01 июня 2019

Исходя из того, что я собрал из комментариев и из моего собственного опыта, это, скорее всего, не проблема для самого 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, измените его.

  • Если ничего из вышеперечисленного не помогло, пожалуйста, оставьте дополнительную информацию в комментариях.

К сожалению, я не очень хорошо разбираюсь в вопросах кодирования, и мне пришлось искать какие-то вещи в процессе написания этого, поэтому я не могу помочь вам так сильно, как хотел бы. Однако в дополнение к описанным выше шагам я могу направить вас по следующим ссылкам, которые должны дать вам дополнительные знания и (следовательно) более глубокое понимание вашей проблемы:

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