[英]printf escaped unicode character from integer
我正在重写这个问题。
我想使用整数常量创建带有Unicode逸出字符的字符串,例如"\α"
。 例如,此字符串是希腊字母alpha。
const char *alpha = "\u03B1"
我想使用整数值0x03B1
调用printf来构造相同的字符串。 对于此示例,可以这样做,但是我不确定从0x03B1
获得这两个数字。
printf("%c%c", 206, 177);
该链接说明了怎么做,但我不确定该怎么做。 http://www.fileformat.info/info/unicode/utf8.htm
对于等于或小于2047(十六进制0x07FF)的字符,UTF-8表示形式跨两个字节。 第一个字节将设置两个高位,第三个位清零(即0xC2至0xDF)。 第二个字节将设置高位,第二个位将清零(即0x80至0xBF)。
注意:我不想用反斜杠创建字符串"\\\α"
。 这与转义的Unicode字符"\α"
不同。
看起来,即使是最新的C和C ++标准在处理Unicode方面也有些令人失望。
对于那些对问题示例感到困惑的人,就像我曾经那样:
const char *alpha = "\u03B1"
在C99中,这将在alpha
存储一个指向字符串"α"
(U + 03B1)的指针。 在C89中,这是无效的语法。
我找不到一种将
\\u\u003c/code>语法与变量或整数常量一起使用的方法,例如问题的要求。
使用库向程序添加更好的Unicode支持可能会更好。 我尚未使用ICU库 ,但这听起来很有希望。
如何使用ICU将Unicode代码点转换为C ++中的字符? :可能是您问题的答案
C ++中的Unicode处理 :一个相关的堆栈溢出问题
我想到了。
第一个字节包含5个高位, 0x7c0 is 11111000000
,第二个字节包含低5位, 0x3f is 00000111111
unicode值。
第一个字节使用掩码0xc0 is 11000000
来设置两个高位,第二个字节使用0x80 is 10000000
来设置第一个高位。
int alpha = 0x03B1; // 945
char byte1 = 0xc0 | ((alpha & 0x7c0) >> 6); // 206
char byte2 = 0x80 | (alpha & 0x3f); // 177
printf("%c%c", byte1, byte2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.