【发布时间】:2015-08-25 14:58:17
【问题描述】:
Logback 1.1.3 LayoutWrappingEncoder documentation 没有说明如果用户不设置默认字符集是什么,但源代码说:
默认情况下,此属性的值为 null,对应于系统的默认字符集。
但是我使用的是PatternLayoutEncoder(带有RollingFileAppender),它似乎是以UTF-8 输出文件(而我的Windows 7 Professional 系统的默认字符集可能不是UTF-8)。
UTF-8 输出实际上是我想要的,但我想确保我不是偶然得到这个,因为文档似乎表明了其他东西。那么,当我没有明确指定字符集时,为什么 Logback 会给我 UTF-8 输出?
【问题讨论】:
-
看起来你是偶然得到这个的。我查看了源代码,在 PatternLayoutEncoder 中找不到任何调用“setCharset”的类。文档用“用户选择的字符集编码”指示this 很好的答案中已经描述的内容。
-
但是这个“偶然”是如何工作的呢?我在 Windows 机器上 --- 它从哪里获得 UTF-8?它必须来自某个地方。
-
默认字符集(通过
LayoutWrappingEncoder中的getBytes()使用)是bit complicated,但not a mystery。这些链接可以帮助确定 UTF-8 的来源? -
啊,现在我们到了某个地方 --- 你提到 LogBack 使用来自
getBytes()的值,这意味着使用来自Charset.defaultCharset的值。奇怪的是......这会在我的 Windows 系统上返回 UTF-8!这很令人惊讶,因为我一直认为InputStreamReader在 Windows 上会默认为 UTF-8 以外的其他内容(例如Windows-1252)……但不,它也会返回"UTF8"!也许我的 Eclipse+Maven 设置做了一些奇怪的事情,或者 Java 8 改变了默认值。无论如何,vanOekel,您想提供一个答案以便获得赏金吗? -
Eclipse 你可以在工作区设置中覆盖文件编码。我怀疑您已经将其设置为 UTF-8。同样在运行配置文件中,您可以更改编码:您将在 Eclipse 中获得 UTF-8,因为您已将项目/环境设置为这样。
标签: java logging utf-8 character-encoding logback