我的目标是将代表英镑符号的字符转换为等效的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: £
我的目标是将未签名的char 0xA3放入代表Unicode英镑表示形式的字符串中:“ \ u00A3”
你到底是什么问题?无论如何,您说您正在编写C ++,但是您正在使用char *以及printf和stdlib.h,因此您实际上是在编写C,而基本C不支持unicode。请记住,C语言中的char不是一个“字符”,而是一个字节,而char *不是字符数组,而是一个字节数组。当您在示例程序中打印“ \ u00A3”字符串时,您不是在打印unicode字符,而是实际上在打印那些文字字节,并且您的终端正在帮助您并将它们解释为unicode字符。它正确打印£字符的事实只是一个巧合。您可以自己查看。如果在示例程序中打印了str [0],则应该只看到“ \”字符。
如果要在C中正确使用unicode,则需要使用一个库。有很多可供选择,而我还没有使用足够的推荐它们。否则,您将需要使用C ++ 11或更高版本,并使用std :: wstring和好友。但是,您所做的并不是真正的unicode,从长远来看,它将无法正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句