我无法在我的Linux机器上将UTF-16或其任何形式设置为区域设置。此示例代码:
#include <iostream>
#include <string.h>
#include <locale.h>
using namespace std;
int main()
{
char *ret = std::setlocale(LC_ALL, "en_US.utf16");
if (ret) {
cout << ret << endl;
}
return 0;
}
输出不会打印语言环境集,这意味着未设置所需的语言环境。
包装盒上支持的区域设置列表不包含任何形式的UTF-16编码。我通过locale -a
$ uname -a
Linux developer.com 2.6.32-279.1.1.el6.x86_64 #1 SMP Tue Jul 10 11:24:23 CDT 2012 x86_64 x86_64 x86_64 GNU/Linux
是否需要安装某些东西才能在包装盒上使用UTF-16?
答案 0 :(得分:6)
您无法在Linux中将UTF-16设置为区域设置,因为UTF-16不兼容ASCII。 C字符串是Null终止的,因为UTF-16可以包含嵌入的nul
字符,这些字符不起作用。你需要坚持使用UTF-8。
如果要生成比系统当前具有的更多语言环境,请查看/etc/locale.gen
,编辑此文件,然后运行(以root用户身份)命令locale-gen
以生成新插入的语言环境。但要注意:即使在这里你也无法生成UTF-16!