Windows上的Unicode setlocale和strftime失败

时间:2010-02-04 03:38:32

标签: php windows unicode strftime setlocale

我有一个页面,它的编码是UTF-8,如果我尝试在unix系统中运行该代码,则Everythings看起来很好但是当我尝试在windows(7)中运行时,一些字符看起来是问号( )。如何在两个系统中运行代码都很好(不使用iconv)。

header('Content-Type: text/html; charset=UTF-8');
setlocale(LC_ALL, 'turkish');
echo strftime("%d %B %Y, %H:%M");

2 个答案:

答案 0 :(得分:9)

Microsoft Windows不支持UTF-8语言环境。因此,如果您提供土耳其语区域设置,它将拍摄一个允许表示特定语言的8位代码页。

例如,对于语言环境希伯来语,它将为pic codepage-1255,对于土耳其语,它可能是1254。

因此,您不能在MS-Windows平台下使用它。

  

如何在两个系统中运行代码都很好(不使用iconv)。

可能在MS Windows下使用非utf8编码。

答案 1 :(得分:3)

对于那些在linux上遇到类似问题的人(这可能也适用于Windows但不确定)。

是的,有'土耳其',但也有'tr_TR.utf8'。如果您使用'tr_TR.utf8',您的问题很可能会被冲走。同样的事情也适用于'希腊'。而是使用'el_GR.utf8'

在Linux上,您可以查看区域设置列表,找到适合您网站的设置。

locale -a

列表太长,您无法看到所有语言,因此您可以将其转储到文件中,然后打开文件进行检查。

locale -a > locale.txt
vi locale.txt

或执行 区域设置-a |针对特定语言的grep语言代码

locale -a | grep tr