【问题标题】:Create Unicode from a hex number in C++从 C++ 中的十六进制数字创建 Unicode
【发布时间】:2019-11-14 12:49:27
【问题描述】:

我的目标是获取一个表示英国磅符号的字符并将其转换为字符串中的 unicode 等价物。

这是到目前为止我的测试程序的代码和输出:

#include <iostream>
#include <stdio.h>

int main()
{
    char x = 163;
    unsigned char ux = x;
    const char *str  = "\u00A3";

    printf("x: %d\n", x);
    printf("ux: %d %x\n", ux, ux);
    printf("str: %s\n", str);

    return 0;
}

输出

$ ./pound 
x: -93
ux: 163 a3
str: £

我的目标是获取 unsigned char 0xA3 并将其放入代表 unicode 英磅表示的字符串中:“\u00A3”

【问题讨论】:

    标签: unicode hex


    【解决方案1】:

    您的问题到底是什么?无论如何,您说您正在编写 C++,但您使用的是 char* 和 printf 和 stdlib.h,所以您实际上是在编写 C,而基本 C 不支持 unicode。请记住,C 中的 char 不是“字符”,它只是一个字节,而 char* 不是字符数组,它是字节数组。当您在示例程序中 printf "\u00A3" 字符串时,您不是在打印 unicode 字符,您实际上是在打印那些文字字节,并且您的终端正在帮助您并将它们解释为 unicode 字符。它正确打印 £ 字符的事实只是巧合。你可以自己看看这个。如果您在示例程序中使用 printf str[0],您应该只会看到“\”字符。

    如果您想在 C 中正确使用 unicode,您需要使用库。有很多可供选择,我还没有使用足够的任何一个来推荐一个。或者您需要使用 C++11 或更新版本并使用 std::wstring 和朋友。但是你所做的不是真正的 unicode,从长远来看不会像你期望的那样工作。

    【讨论】:

      猜你喜欢
      • 2017-01-09
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 2011-05-14
      • 2017-03-23
      • 1970-01-01
      相关资源
      最近更新 更多