UTF-8编码在Eclipse Java应用程序中无法工作

3

我有一个编码问题无法解决。

我有下一个Java文件:

public class Main {

    public static void main(String[] args) {
        System.out.println("áéíàèì€aei");
    }
}

这个文件的字符集编码是UTF-8,我使用Windows上的Eclipse编辑和编译它。 编译完成后,我将.class文件移动到一个Debian服务器,它的字符集编码也是UTF-8,如下所示:

root@srv-dev:~# locale
LANG=fr_FR.UTF-8
LANGUAGE=
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=fr_FR.UTF-8

当我运行应用程序时,出现以下情况:
root@srv-dev:~# java Main
áéíàèìâ¬aei

我是Eclipse,我通过单击属性并转到资源/文本文件编码/其他:UTF-8来设置项目编码为UTF-8。

我看不出还需要更改什么。也许我错过了什么,但我找不到它。


1
你是如何在Debian上执行命令的 - 是通过SSH吗?如果是,那么你的SSH客户端可能不支持UTF-8编码。 - Duncan Jones
哎呀!是SSH的问题吗?我不确定,因为在执行针对MySQL数据库的查询时,我仍然能够得到正确的结果。例如:"mysql> select libelle from echeance where libelle like '% Exécution - Echéance Mois Mo + 1%';" +----------------------------------------------------+ | libelle | +----------------------------------------------------+ | Tranche 2 - Exécution - Echéance mois Mo + 10 | | TC 2 - Exécution - Echéance Mois Mo + 10 65%x2/12 | ... - MiGU
2个回答

2
问题与putty的配置有关。它将远程字符集设置为ISO-8859-1。
我猜mysql查询结果显示重音符号的原因是因为它也使用ISO-8859-1字符集。要配置putty,请按照下面的链接操作: 配置PuTTY使用UTF-8 要永久更改编码,请按照这个答案进行操作——你实际上会在链接的评论中找到它,但我不希望你错过它:
"为了使这些更改在Putty中永久生效,你打开Putty,进行想要保存的更改,然后点击Session窗口返回,在Saved Sessions下点击"Default Settings",然后点击Save。下次打开Putty时,任何你在点击保存之前所更改的内容仍然有效。"

如果您在问题中提到您使用的是PuTTY,您将立即得到答案。在这些事情上精度很重要。 - Denys Séguret
是的,你说得对。问题是我没想到Putty会是问题,因为它显示了我输入的每个字符。这就是为什么我没有提到它的原因。但也确实很重要要提供每一个细节。 - MiGU

1

感谢您的回答。实际上,Shell正在显示这些字符: "root@srv-dev:~# áéíóúuàèìù" <<--从Shell复制粘贴 - MiGU
@user1453418 你尝试在Debian上编译和运行文件了吗? - Juned Ahsan
没有。因为我正在尝试解决一个更大的问题。有一个开发者需要使用Eclipse@windows编写应用程序,然后在Debian服务器上部署它。我只需要设置环境,但我刚刚发现了这个Java编码问题。 - MiGU
再次感谢Juned。显然一切都设置正确了。root@srv-dev:~# locale charmap UTF-8 - MiGU

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接