无法将UTF-16设置为区域设置。

8

我无法在我的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之前,需要在计算机上安装相关软件吗?

1个回答

7

由于UTF-16与ASCII不兼容,您无法在Linux中将UTF-16设置为语言环境。C字符串以空字符结尾,而UTF-16可能包含嵌入的nul字符,这样是行不通的。您需要使用UTF-8。

如果您想生成比系统当前更多的语言环境,请查看/etc/locale.gen文件,编辑此文件,然后运行(作为root用户)命令locale-gen以生成新插入的语言环境。但请注意:即使在这里,您也无法生成UTF-16!


UTF-16不包含内嵌的空字符。它包含空字节。UTF-16字符宽度为16位(每个字符两个字节)。 - Doug Royer
然而,UTF-16中的字符串以0x0000结尾,因为它是UTF-16的空字符。还要注意UTF-16LE和UTF-16BE的存在。 - Doug Royer
如果从C-String的角度来看,它确实包含了NUL字符。这就是我所写的内容。 - Nidhoegger
如果你指的是ASCII或UTF-8字符串,那么你是正确的。但问题是关于UTF-16,而不是8位字符串。 - Doug Royer
我在 Linux 上下文中指的是C-String(这就是本文所讨论的内容)。所以是的。 - Nidhoegger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接