setlocale(LC_CTYPE,“de_DE.UTF8”)或setlocale(LC_CTYPE,“de_DE.UTF-8”)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了setlocale(LC_CTYPE,“de_DE.UTF8”)或setlocale(LC_CTYPE,“de_DE.UTF-8”)?相关的知识,希望对你有一定的参考价值。

setlocale(LC_CTYPE, "de_DE.UTF8")

要么

setlocale(LC_CTYPE, "de_DE.UTF-8")

有没有破折号?我在答案中都看到过。

答案

我运行locale -a并使用它输出的字符串。在OS X 10.9上,我得到了de_DE.UTF-8。在Debian 6上,我得到了de_DE.utf8。另一方面,dpkg-reconfigure locales使用de_DE.UTF-8。最安全的方法可能是检查setlocale的返回值,如果失败则尝试不同的变体。

也就是说,所有版本通常都应该工作:有或没有破折号,大写或小写。

另一答案

编码名称为UTF-8。

但在这种情况下,两个参数都是正确的,他们正在为您做同样的工作

另一答案

这是一个以编程方式解决它的实用解决方案。当setlocale失败时,它返回false。

if (!setlocale(LC_ALL, str_replace('utf-8', 'utf8', $locale)) 
 && !setlocale(LC_ALL, str_replace('utf8', 'utf-8', $locale))) {
   /* fail gracefully */
}
/* your locale has been set up properly

在我的情况下,一个可以在我们的Mac上工作,另一个可以在Linux CI盒子上工作,所以这个解决方案使测试都传递给它们。

顺便说一句,小心LC_ALL。为您需要的最弱范围设置区域设置。

另一答案

您实际上可以将值数组传递给setLocale()。我在OSX上开发并在Linux上运行的主机上进行测试时遇到了这个问题。所以现在我这样做:setLocale(LC_ALL, ["de.utf", "de_DE.utf", "de_DE.UTF-8", "de", "de_DE"])匹配的第一个是go。文件:https://secure.php.net/setlocale

以上是关于setlocale(LC_CTYPE,“de_DE.UTF8”)或setlocale(LC_CTYPE,“de_DE.UTF-8”)?的主要内容,如果未能解决你的问题,请参考以下文章

登陆报错:-bash: warning: setlocale: LC_CTYPE: cannot c

text Centos警告:setlocale:LC_CTYPE:无法更改区域设置(UTF-8):没有此类文件或目录

警告:setlocale: LC_CTYPE: 无法改变区域选项 (UTF-8)

当我 ssh 连接到 vagrant centos 6 时,我收到警告 setlocale LC_CTYPE

MSVCRT.DLL Console I/O Bug(setlocale(LC_CTYPE, "Chinese_China.936"))

终端SSH远程连接CentOS报错:-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or