使用Java程序在cmd中打印阿尔巴尼亚字符

时间:2017-02-25 18:43:58

标签: java unicode encoding cmd character-encoding

我在.java文件中有一个字符串"Përshëndetje botë!",我正在尝试使用System.out.println()打印它。该文件采用ISO-8859-1编码。在cmd我做

chcp 28591

将编码更改为ISO-8859-1(每the list)。

然后我使用

编译.java文件
javac -encoding ISO-8859-1 C:\...\Hello.java

并使用

运行它
java -Dfile.encoding=ISO-8859-1 packagename.Hello

在这种情况下,ë将替换为空格。我也试过

java -Dfile.encoding=ISO88591 packagename.Hello

并且ë被错误的外国符号替换。

我如何让它运行?

1 个答案:

答案 0 :(得分:1)

实际答案

根据OP's comment,实际问题是字体cmd使用的字体没有相关的符号。

原帖

我发布这个作为答案,因为我想说的是评论太长了:)。

首先,请edit your question添加minimal example打印代码。例如,如果您可以编写一个单独的Java程序,除了打印消息之外什么都不做,那么调试起来会容易得多。 (也许packagename.Hello就是这样一个例子,但我无法说出来。)

其次,请尝试以下操作,并edit your question包含每个步骤的结果。

  1. 检查源文件中的实际字节以确认其编码,然后编辑您的问题以包含该信息。您可以使用例如the FileFormat.info hex dumper(我不隶属于它)。例如,以下是您的字符串的输出,粘贴到UTF-8文本文件中:

    file name: foo.txt
    mime type: 
    
    0000-0010:  50 c3 ab 72-73 68 c3 ab-6e 64 65 74-6a 65 20 62  P..rsh.. ndetje.b
    0000-0017:  6f 74 c3 ab-21 0d 0a                             ot..!..
                      ^^ ^^                                        ^^
    

    注意,在^^标记处,UTF-8中的ë0xc3 0xab

    相比之下,在ISO 8859-1(又名" latin1"在vim中),相同的文字是:

    file name: foo.txt
    mime type: 
    
    0000-0010:  50 eb 72 73-68 eb 6e 64-65 74 6a 65-20 62 6f 74  P.rsh.nd etje.bot
    0000-0014:  eb 21 0d 0a                                      .!..
                ^^                                               ^
    

    请注意,ë现在是0xeb

  2. 尝试以java packagename.Hello运行您的命令,不用任何-D选项。在您阅读的answer中,-D的{​​{1}}选项不是必需的。

  3. 尝试代码页java,与earlier question一样。