我将从一开始就解释我的问题,我有一个 Ubuntu 服务器 8.04LTS,我使用带有 Tomcat 6.0.18 和 JRE 1.6 的 Java 应用程序。问题是诸如 (é è ç û) 之类的字符的显示被其他奇怪的字符替换。我知道这是字符编码的问题,所以我尝试fr_FR.ISO-8859-1
在 bashrc 文件中添加编码,/etc/default/locale
然后我添加了LANG="fr_FR.ISO-8859-1"
。我成功地从远程控制台 (PuTTY) 显示好字符,但直接在 shell 服务器上键入时仍然会出现同样的问题。
例如,当我有mkdir
一个名为“Août”的文件夹时,我会收到“Ao♦t”。
我认为这可能是由于系统分区使用的编码造成的,但我不知道如何验证这一点。
有人知道我该如何解决这个问题吗?
答案1
更新:这也许很明显,但是您必须在系统范围设置(/etc/default/locale
)和(如果需要)应用程序的 Java 设置中始终一致地使用 ISO-8859-1 或 UTF-8。
您需要将系统范围的区域设置更改为使用 ISO-8859-1 - 但是,如果应用程序支持 UTF-8,只需让它使用它(通过在-Dfile.encoding=utf8
JVM 上)就会更清楚,因为 Ubuntu 现在默认在 UTF-8 中运行。
检查应用程序的文档以了解如何设置区域设置和编码(例如 ISO-8859-1)- 如果没有涵盖,请设置JAVA_TOOL_OPTIONS 环境变量可能会有用 – 这可能在应用程序的启动脚本中。
要将 Ubuntu 设置为使用 ISO-8859-1:
- 如果不存在所需的 Linux 区域设置,则生成它,并通过以下方式更新 /etc/default/locale更新区域设置:
sudo locale-gen fr_FR sudo update-locale LANG=fr_FR.ISO-8859-1
- 更新:进行类似的编辑/etc/环境
- 不确定为什么 Ubuntu 需要这个,但它在我的 8.04 系统上,它是全新安装而不是升级
- 关闭所有应用程序和 shell 会话,然后重新启动它们。
与 Windows 和 Mac 不同,Linux 上的文件系统没有字符编码的概念,因此应用程序可以随意生成具有 ISO-8859-1 或 UTF-8 路径名的文件,甚至将它们混合在同一个目录中。这就是为什么你可以将目录创建为“Août”,并让它在另一个 shell 中显示错误。
使用env | egrep "^(LC|LANG)"
可以检查区域变量设置 - 听起来您的本地 shell(xterm、GNOME Terminal 等)的设置是错误的。一旦您获得正确的设置,请将它们放入~/.bashrc
shell 的文件中。
如果你创建的文件夹路径名编码错误,请查看康维- 它在 Ubuntu 存储库中。
有关设置区域设置和字符编码的一些常规信息Gentoo UTF-8 指南- 虽然这不是适用于 Ubuntu 的,所以一些命令有所不同,但locale
命令是相同的,并且想法解释得相当好。
答案2
尝试以LC_ALL
相同的方式定义。
此外,如果您在本地查看时使用 xterm,请尝试使用参数启动它-U
。
但是,如果您在 Tomcat 上遇到问题,则可能应该将-Dfile.encoding=utf8
或设置-Dfile.encoding=iso8859-1
为 JVM 参数。也许您还需要-Duser.region=fr
?