如何将Unicode
(如字符)向上箭头分配给wchar_t
变量?将Unicode分配给wchar_t变量
0
A
回答
0
wchar_t
可能在Linux上是32位,但在Windows 16位上,UTF-16LE编码有时需要两个wchar_t来存储一个Unicode代码点。
UTF-16LE和UTF-16BE不是线性的,具有不能分成两个字符串的对。而wchar_t是不可移植的。
因此更好使用UTF-8和char
。
void append_utf8(string& s, uint cp) {
if (cp < 0x80 && cp != 0) {
// Let encode U+0 too (Modified UTF-8), as non-terminator?
s.append(1, (char) cp);
} else {
char cpBytes[6];
int bi = 0;
int lastPrefix = 0xC0;
int lastMask = 0x1F;
for (;;) {
int b = 0x80 | (cp & 0x3F);
cpBytes[bi] = (char)b;
++bi;
cp >>= 6;
if ((cp & ~lastMask) == 0) {
cpBytes[bi] = (char) (lastPrefix | cp);
++bi;
break;
}
lastPrefix = 0x80 | (lastPrefix >> 1);
lastMask >>= 1;
}
while (bi > 0) {
--bi;
s.append(1, cpBytes[bi]);
}
}
}
string s;
append_utf8(s, 0x2191): // For U+2191 up arrow.
append_utf8(s, 0x1F913): // For U+01F913 emoji nerd face.
对于Windows类似宽字符(UTF-16):
void append_wch(std::wstring& s, uint cp) {
if (cp < 0x10000) {
s.append(1, (wchar_t) cp);
} else {
cp -= 0x10000;
uint w = (cp >> 6) + 0xD800;
s.append(1, (wchar_t) w);
w = (cp & 0x3FF) + 0xDC00;
s.append(1, (wchar_t) w);
}
}
(心,我与Java的影响污点)
+1
Windows API是UTF-16,因此在该平台上使用UTF-8需要大量额外的工作。请参阅http://utf8everywhere.org/ –
+0
@MarkRansom是的,只有Windows的桌面开发可能就是OP所需要的。谢谢 –
相关问题
- 1. 将javascript变量分配给ruby变量
- 2. 分配给变量
- 3. 如何将super分配给变量?
- 4. Bash将尾值分配给变量
- 5. 将AWK结果分配给变量
- 6. 将HTML内容分配给PHP变量
- 7. 将blocktrans输出分配给变量
- 8. 将帮助()分配给变量
- 9. Ruby:Green_shoes,将list_box选择分配给变量
- 10. 将订阅值分配给变量:Angular2
- 11. 将文件内容分配给变量
- 12. 未将时间分配给DateTime变量
- 13. Python将CSV文件分配给变量
- 14. 将awk输出分配给shell变量
- 15. 将JSON对象值分配给变量
- 16. 将外部JSON分配给变量
- 17. 将显示属性分配给变量
- 18. html.hiddenvalue将其分配给变量
- 19. 将变量分配给null做什么?
- 20. SCSS:将两个值分配给变量
- 21. 将变量分配给视图
- 22. AngularJS:将$ http.get数据分配给变量
- 23. C++:将cin分配给ifstream变量?
- 24. 将动态url分配给变量
- 25. 如何将表名分配给变量?
- 26. 无法将UUID分配给bash变量
- 27. Flex未将数据分配给变量
- 28. 如何将MojoX :: Redis分配给变量?
- 29. 将Cookie分配给变量? Shopify
- 30. 将Swift方法分配给变量
'wchar_t的变量= L'\ u1234';'(用所需的Unicode代码点替换1234)。 –
@IgorTandetnik绝对正确,这是唯一可靠的方法。如果您需要查找Unicode代码点值,只需Google即可。例如,下面是一个箭头页面:https://en.wikipedia.org/wiki/Template:Unicode_chart_Arrows –
字符直接赋值在Windows上对代码点U + 10000及以上无效,因为'wchar_t'为16位。在这种情况下,您需要使用占用两个'wchar_t'的代理对。 – Sergio