编码磅符号

时间:2020-08-05 06:31:16

标签: java encoding character

我们有一个应用程序,该应用程序在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和编码有所不同。 但是,您能建议我如何通过更改代码来使£符号在测试服务器上正确输出。

此应用程序将在不同的服务器上运行,所以我不能认为编码是一致的。

1 个答案:

答案 0 :(得分:0)

与UTF-8编码的文本文件一样,文件在两台计算机上的加载方式相同。这意味着机器之间的两件事之一有所不同:

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

“替换字符”通常是带有问号的菱形。但是,在许多字体中,此类字符不可用。如果缺少替换字符,则单个问号本身就是替换替换字符。

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

相关问题