linux - 无法将 UTF-16 设置为语言环境

标签 linux utf-16

我无法在我的 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?

最佳答案

您无法在 Linux 中将 UTF-16 设置为语言环境,因为 UTF-16 与 ASCII 不兼容。 C 字符串以 Null 终止,并且由于 UTF-16 可以包含嵌入的 nul 字符,因此无法正常工作。您需要坚持使用 UTF-8。

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

关于linux - 无法将 UTF-16 设置为语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36592540/

相关文章:

c++ - 如何将用户从控制台输入的内容读入 Unicode 字符串?

c++ - 使用C/C++转义unicode字符

linux - Grep 递归和计数

Linux cmake在文件(GLOB)命令中停留了几个小时

C# Encoding.Convert 与 C++ MultiByteToWideChar

java - 为什么 UTF-8 和 UTF-16 编码的字符串在 Java 中打印不一样?

linux - 使用 bash shell 脚本在 2 个字符串之间提取字符串

几乎可以确定给定 CIDR 表示法的子网成员资格,但会得到意想不到的结果

linux - Awk:- 如何处理 elb-describe-lbs 的文本以仅了解可用区

java - 将带有整数的 ArrayList 转换为 UTF-16 字符串