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

时间:2014-04-24 19:27:02

标签: php utf-8 locale

setlocale(LC_CTYPE, "de_DE.UTF8")

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

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

4 个答案:

答案 0 :(得分:3)

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

尽管如此,所有版本通常都应该有效:有或没有破折号,大写或小写。

答案 1 :(得分:2)

编码名称为UTF-8。

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

答案 2 :(得分:0)

这是一个以编程方式解决它的实用解决方案。 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。设置您需要的最弱范围的区域设置。

答案 3 :(得分:0)

您实际上可以将值数组传递给import matplotlib as plt dpi = 300 # Recommended to set between 150-300 for quality image preview plt.rcParams['figure.dpi'] = dpi 。我在OSX上开发并在Linux上运行的主机上进行测试时遇到了这个问题。所以现在我这样做:setLocale()匹配的第一个是go。 文档:https://secure.php.net/setlocale