[英]How to write Hebrew strings to a log file using log4j
如何将希伯来字符串写入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
根据我从评论和我自己的经验中收集的内容,这很可能不是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++
打开文件,然后单击“ Encoding
选项卡,检查是否使用UTF-8
进行Encoding
。 如果该选项未设置为UTF-8
,请更改它。
如果上述方法均无效,请在评论中发布更多信息。
不幸的是,我不是那么精通编码问题而且在写这篇文章的过程中不得不看一些东西,所以我无法像你想的那样帮助你。 但是,除了提供上述步骤之外,我还可以引导您访问以下链接,这些链接应该为您提供进一步的知识,并(因此)更深入地了解您的问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.