微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Locale.getDefault总是返回en

unix机器上的服务器总是使用en作为认语言环境。 以下是区域设置输出

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

我只是不明白,如果LANG设置正确,那么为什么服务器以en语言环境启动。

Linux更新后在JVM中错误文件编码

Win32 Api将2个字母(中性)标识符转换为语言

在Windows上使用Perl获取当前系统本地编码

设置语言环境后,scanf-printf调用非ASCII字符

为什么localeconv()在Linux上意大利语(it_IT)返回空string(“”)为000_sep?

在Linux / Unix / Mac中,设置LC_ALL和LANG可以控制Java程序的认语言环境。 在Windows中,区域设置是从“控制面板”的“区域和语言选项”下设置的。

当JVM在* nix环境中启动时,它将执行以下操作:

扫描LC_ALL的环境

如果LC_ALL不存在,请扫描LANG的环境

如果设置了JVM设置user.language ,则使用该设置代替环境变量。

如果没有设置,认为en_US (我相信这是最终的失败案例)

在您的环境中,您将LC_ALL设置为C ,这只是C语言环境。 这基本上是一个传统的回落到当地没有使用的日子。

您可以更改LC_ALL ,然后重新启动JVM,并为java.util.Locale.getDefault()获取新的值。

例:

import java.util.Locale; public class LocaleTest { public static void main(String[] args) { System.out.println(Locale.getDefault()); } }

这是运行:

> LC_ALL=en_UK java LocaleTest en_UK > LC_ALL=ja_JP java LocaleTest ja_JP

另请注意,如果您运行的是Java 1.7.0-b147,则JRE不会识别语言环境的环境设置,并且将始终使用认的系统语言环境。

错误报告在这里: http : //bugs.sun.com/bugdatabase/view_bug.do?bug_id=7073906

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐