如何将希伯来语字符串写入log4j文件。现在,我在文件中看到??????
。
我在网上到处搜索以将Unicode转换为字符串:
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
答案 0 :(得分:0)
根据我从评论中收集的信息和我个人的经验,这很可能不是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
,请进行更改。
如果以上方法均无效,请在评论中发布更多信息。
不幸的是,我对编码问题不是很精通,并且在编写本文时必须查找一些东西,所以我无法为您提供所需的帮助。但是,除了提供上述步骤之外,我还可以引导您转到以下链接,该链接应该为您提供更多的知识,并且(因此)对您的问题有更多的了解: