【发布时间】:2020-08-05 06:31:16
【问题描述】:
当应用程序在 Mac 上运行时,我们有一个应用程序可以正确输出 £(磅)符号但输出 ? (问号)在测试服务器上运行时。
以下是代码示例和生成的输出
LOGGER.debug(" TESTING file.encoding=" + System.getProperty("file.encoding"));
LOGGER.debug(" TESTING Charset.defaultCharset=" + Charset.defaultCharset());
try {
LOGGER.debug(" TESTING InputStreamReader.getEncoding=" + new InputStreamReader(new FileInputStream("/tmp/PrintCharSets.java")).getEncoding() );
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String pound = "£";
LOGGER.debug(
" TESTING - 0 - Test Character [" + pound + "]");
测试服务器上的输出
TESTING file.encoding=UTF-8
TESTING Charset.defaultCharset=US-ASCII
TESTING InputStreamReader.getEncoding=ASCII
TESTING - 0 - Test Character [?]
在我的 Mac 上输出
TESTING file.encoding=UTF-8
TESTING Charset.defaultCharset=UTF-8
TESTING InputStreamReader.getEncoding=UTF8
TESTING - 0 - Test Character [£]
我想这是由于字符串的编码。 我们可以看到 defaultCharset 和 encoding 是有区别的。 但是,您能否建议我如何通过更改代码在测试服务器上正确输出 £ 符号。
这个应用程序将在不同的服务器上运行,所以我不能假设编码是一致的。
【问题讨论】:
-
看看stackoverflow.com/questions/1006276/…... 显然它取决于运行JVM 的操作系统。因此,我建议在您正在读取的输入流上明确设置字符编码,如tutorials.jenkov.com/java-io/… 所示。 (不是这些页面的作者)
-
尝试使用unicode,即
String pound = "\u00A3"; -
Jordan 似乎服务器上配置的默认编码不同,因此设置将不起作用,因为它可能与默认值不同。在我的场景中,测试服务器上的 defaultCharset 是 ASCII,但在我的 Mac 上,它是 UTF-8 Abra 可以工作的。我只是想知道是否应该将字符串中的 £ 字符替换为 \u00A3 谢谢 -