如何將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. 將Python變量分配給JavaScript變量
- 3. 將javascript變量分配給ruby變量
- 4. 將信號分配給變量並將變量分配給信號
- 5. 將變量1分配給變量2並將變量2分配給變量3 javascript
- 6. 分配給變量
- 7. 將變量分配給pyserial端口
- 8. 將函數輸出分配給變量
- 9. 將現有函數分配給變量
- 10. 將變量分配給MXML組件ID
- 11. 將輸入值分配給雙變量
- 12. 將變量分配給下拉ID
- 13. 將CSV值分配給變量
- 14. Javascript將rel屬性分配給變量
- 15. 將blocktrans輸出分配給變量
- 16. 將變量分配給MVC視圖類?
- 17. 將變量分配給null做什麼?
- 18. XSLT:將值分配給全局變量
- 19. AngularJS:將$ http.get數據分配給變量
- 20. 將值分配給變量列表
- 21. MySQL:將列值分配給變量
- 22. 未將時間分配給DateTime變量
- 23. NullReferenceException將數據分配給變量
- 24. 將訂閱值分配給變量:Angular2
- 25. 將Perl數組分配給Javascript變量
- 26. 如何將int分配給String變量?
- 27. 將變量分配給視圖
- 28. 將動態url分配給變量
- 29. 如何將GUID值分配給變量?
- 30. Ruby:Green_shoes,將list_box選擇分配給變量
'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