Java log4j打印错误的字符

Java log4j打印错误的字符,java,log4j,Java,Log4j,有人告诉我,我给他的使用log4j的程序不能正确打印字符。他告诉我,“é”在文件中被打印为“Ô(例如:“Vidéo”变成“VidÃo”) 这可能是一些编码问题,但我喜欢重现问题来证明它是固定的。 我无法找到关于该主题的好(短)文档,因此: 是什么导致了这个问题(log4j是如何选择编码的?) 可以通过简单地使用“log4j.appender.myappender.encoding=UTF-8”来修复它吗 谢谢你的帮助 (它是FileAppender及其变体的基类。有一个方法。所以是的:使用lo

有人告诉我,我给他的使用log4j的程序不能正确打印字符。他告诉我,“é”在文件中被打印为“Ô(例如:“Vidéo”变成“VidÃo”)

这可能是一些编码问题,但我喜欢重现问题来证明它是固定的。 我无法找到关于该主题的好(短)文档,因此:

  • 是什么导致了这个问题(log4j是如何选择编码的?)
  • 可以通过简单地使用“log4j.appender.myappender.encoding=UTF-8”来修复它吗
  • 谢谢你的帮助

    (它是
    FileAppender
    及其变体的基类。有一个方法。所以是的:使用
    log4j.appender.myappender.encoding=UTF-8
    应该可以简单地工作

    但是,请注意,“Vidéo”变成“VidÃo”看起来像是在写UTF-8,但无论您使用什么方式查看文件,都会将其解释为其他编码(通常是一些ISO-8859-*编码或ISO派生之一)

    Ã
    为U+00C3,
    为U+00A9。它们在ISO-8859-1中编码为0xC3和0xA9


    é
    是U+00E9,在UTF-8中编码为0xC3 0xA9。

    如果您的用户通过SSH查看日志文件,那么他们需要告诉他们的SSH客户端也使用UTF-8。

    即使您没有设置它,它也将使用另一种编码进行写入。任何无法编码的都将是问号(?),但这里的情况似乎并非如此,因此,如果您知道使用了什么编码(可能是操作系统默认编码),则该文件可能仍然可读。当然,UTF-8是最好的,因为它可以对所有内容进行编码。明确配置UTF-8始终是一个好主意,不要让它因安装而异。感谢您的快速回复。当未指定任何内容时,LOG4J是如何选择编码的?@IDEMEL:与Java中所有其他组件在未指定编码时选择编码的方式相同指定:他们选择依赖于当前区域设置的平台默认编码。Notepad++检测到该文件为UTF-8,因此它一定是他的客户端。谢谢!
    Ã
    是一个冒烟枪,您正在将UTF-8数据视为原始字符。