我似乎不能正确理解这一点。
我有这样的代码:
putenv('LC_ALL=eng_US.UTF-8');
var_dump(setlocale(LC_ALL, 'eng_US.UTF-8', 'eng_US'));Windows上的输出
string 'English_United States.1252' (length=26)Linux上的输出
bool(false)Linux可以在en_US上运行,但不能在Windows上运行。Windows查看eng_US和Linux en_US文件夹。
有人找到解决这个问题的办法了吗?或者,有没有一种方法可以放入一个自定义字符串,该字符串将被考虑到而不考虑操作系统?
(我必须补充,我在Windows7上使用的是WAMP,而Linux机器是一个带有nginx +php-fpm的CentOS )
发布于 2012-08-23 03:43:52
区域设置名称与平台相关。
在大多数unix系统上,您需要<two letter language code>_<two letter country code>[.<optional encoding>]。您可以使用命令行locale -a列出有效的区域设置名称。
正确的Windows使用相同的X_X.X方案,不同之处在于它们使用语言和国家的全名,并且使用代码页号而不是编码名称:English_United States.1252。Windows似乎也有一些用于找出其他字符串的启发式方法,尽管它似乎没有达到Unix风格的语言环境名称的程度。此外,无论您使用名称“UTF-8”还是使用代码页号“65001”指定UTF-8,Windows都不支持UTF-8作为区域设置编码。
正如您已经发现的,Windows和其他平台的语言环境名称是不同的。您不能对所有平台使用相同的字符串。相反,您必须为当前平台编写使用正确字符串的代码。
if Linux
return "en_US.UTF-8"
if Windows
return "English_United States.1252"https://stackoverflow.com/questions/12080099
复制相似问题