Linux服务器不支持西班牙语字符

时间:2015-05-29 09:30:46

标签: java linux unix character-encoding locale

我有Java应用程序,用户从UI输入“西班牙语字符”,需要在其他页面上显示。应用程序在WINDOWS环境中很好,但在UNIX / Linux服务器中部署时,西班牙语字符未正确显示

这是我的Unix语言环境设置(使用 locale 命令)

LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_MESSAGES="C"
LC_ALL=

我的unix box字符编码器(使用我检查过Charset.defaultCharset()的java)是ISO 8859 1 我的java代码显示这个数据是

spanishName = new String(spanishName.getBytes("8859_1"), "UTF-8");

现在正在打印N?? L???d?

如果我直接打印此变量,请NT= LTß±dTr

但原始数据为Néó Léáñdér

1 个答案:

答案 0 :(得分:2)

UTF-8编码不会显示在POSIX" C"语言环境。您的服务器可能支持其他语言环境。要查看此内容,请运行

locale -a

并查找以各种" utf8"结尾的设置或" utf-8" (大写和小写)。如果找到一个,请将您的语言环境变量设置为

假设您找到en_US.UTF-8。然后(假设你的shell是kshbash),你可以在运行Java应用程序之前执行这些命令:

unset LANGUAGE
LANG=en_US.UTF-8; export LANG
LC_CTYPE=en_US.UTF-8; export LC_CTYPE
LC_ALL=en_US.UTF-8; export LC_ALL

csh中,那将是

unsetenv LANGUAGE
setenv LANG en_US.UTF-8
setenv LC_CTYPE en_US.UTF-8
setenv LC_ALL en_US.UTF-8

这将设置系统区域设置。还有其他方法可以设置区域设置,如

中所述

即,在命令行上(引用Oracle的文档):

  

其次,在某些Java运行时实现上,应用程序用户可以通过设置user.language,user.country和user.variant系统属性在命令行上提供此信息来覆盖主机的默认语言环境。

它给出了例子

java -Duser.language=fr -Duser.country=CA Default

最后,

  

第三,您的应用程序可以调用setDefault(Locale aLocale)方法。 setDefault(Locale aLocale)方法允许您的应用程序设置系统范围的资源。使用此方法设置默认语言环境后,对Locale.getDefault()的后续调用将返回新设置的语言环境。

请注意,Java使用系统区域设置中的不同名称,并非每个平台都支持所有名称(请参阅table);你必须找到适合你的东西。