我将从一开始就解释我的问题,我有一个Ubuntu服务器8.04LTS,我使用了Tomcat 6.0.18和JRE 1.6的Java应用程序。 问题是像(éèçû)这样的字符的显示被其他奇怪的字符replace。 我知道这是一个字符编码的问题,所以我尝试在bashrc文件和/etc/default/locale添加编码fr_FR.ISO-8859-1 ,并添加了LANG="fr_FR.ISO-8859-1" 。 我成功地从远程控制台(PuTTY)显示好字符,但直接在shell服务器上键入时仍然会出现同样的问题。
例如,当我打开一个名为“Août”的文件夹时,我收到了“Ao♦t”。
我想这可能是由于系统分区使用的编码,但我不知道如何可以validation这一点。
有没有人有一个想法,我可以解决这个问题?
更新:也许这是明显的,但是你必须在应用程序的Java的系统范围设置( /etc/default/locale )和(如果需要的话)中始终如一地使用ISO-8859-1或UTF-设置。
您需要将系统范围的语言环境更改为使用ISO-8859-1 – 但是,如果应用程序支持UTF-8,则只需使用该语言(通过JVM上的-Dfile.encoding=utf8 )因为Ubuntu现在默认以UTF-8工作。
检查应用程序的文档以了解如何设置语言环境和编码(例如ISO-8859-1) – 如果未包括此内容,则设置JAVA_TOOL_OPTIONS环境variables可能很有用 – 可能在应用程序的启动脚本中。
要设置Ubuntu使用ISO-8859-1:
sudo locale-gen fr_FR sudo update-locale LANG=fr_FR.ISO-8859-1
与Windows和Mac不同,Linux上的文件系统没有字符编码的概念,因此应用程序可以随意生成ISO-8859-1或UTF-8path名的文件,甚至可以将它们混合在同一目录中。 这就是为什么你可以创build一个目录为“Août”,并在另一个shell中显示错误。
使用env | egrep "^(LC|LANG)" env | egrep "^(LC|LANG)"可以用来检查语言环境variables的设置 – 听起来像你的本地shell(xterm,GNOME Terminal等)是错误的。 一旦你有正确的设置,把它们放到你的shell的~/.bashrc文件中。
如果您创build的path名中包含错误编码的文件夹,请查看convmv – 它位于Ubuntu存储库中。
关于在这个Gentoo UTF-8 HOWTO中设置语言环境和字符编码的一些常规信息 – 尽pipe这不是Ubuntu的,所以一些命令不同, locale命令是相同的,并且理念被很好地解释。
尝试以同样的方式定义LC_ALL 。
另外,如果在本地查看本地时使用xterm,请尝试使用-U参数启动它。
但是,如果您在Tomcat上遇到问题,则应该将-Dfile.encoding=utf8或-Dfile.encoding=iso8859-1为JVM参数。 也许你还需要-Duser.region=fr ?