【问题标题】:Encoding Pound Sign编码英镑符号
【发布时间】: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 谢谢 -

标签: java encoding character


【解决方案1】:

文件在两台机器上以相同的方式加载,作为 UTF-8 编码的文本文件。这意味着机器之间存在以下两点不同:

  1. 文件内容不同
  2. 其中一台机器缺少字符的字形。

“替换字符”通常是带有问号的菱形。然而,在许多字体中,这样的字符是不可用的。当替换字符丢失时,单个问号本身就是一个备用替换字符。

如果您复制显示“?”的文件转到mac,它现在显示英镑符号,问题不是文件或编码,问题是字体。

【讨论】:

  • 输出(终端)是否可能不支持/使用 UTF-8?
  • Edwin 将日志文件(将 £ 显示为?)从测试服务器复制到我的 Mac 上,但仍显示为?不幸的是
猜你喜欢
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多