0
A
回答
2
使用ucnv_getNextUChar從ICU庫。 以下代碼將二進制流拆分爲字符並打印每個字符的大小:
const char * utf8_strings[] = {"Samotność - cóż po ludziach, czym śpiewak dla ludzi"};
icu::ErrorCode err;
UConverter* conv = ucnv_open("UTF-8", err);
size_t len = strlen(utf8_strings[0]);
const char* curr = utf8_strings[0];
do {
const char* prev = curr;
ucnv_getNextUChar(conv, &curr, curr+len, err);
std::cout << prev[0] << " " << curr - prev << std::endl;
} while (curr < utf8_strings[0]+len);
1
由於大多數原因,在設計字符集時,始終有一種方法可以通過第一個字符來確定字符的字節長度。所以只要說:
- 如果它是UTF-16,每個字符都是兩個字節。
- 如果它是UTF-8,可以存在三種情況:
- 字符下面0x80表示在格式
of 0xxx xxxx
- 字符以上0x80的和下面的0x800是在上述的0x800處於
110x xxxx
10xx xxxx
- 字符格式的
1110 xxxx
10xx xxxx
10xx xxxx
- 字符下面0x80表示在格式
- 格式如果是GBK,你可以告訴是否有字符代碼的另一個字節通過檢測該字符的第一個字節是否爲l比0x7f更大。
- 對於iso-latin-1或類似的東西,總是有一個字節。
+0
0xFFFF以上的字符在UTF-16中使用4個字節。 –
+0
任何支持此操作的庫? –
相關問題
- 1. C++字符串長度以字節爲單位
- 2. 以字節爲單位獲取UTF-8字符串長度的最佳方法?
- 3. 以字節爲單位的Unicode字符長度 - 總是一樣嗎?
- 4. 以字節爲單位的多字節序列的長度(unicode)代碼點,字符和光標位置
- 5. 爲什麼字符串的字節長度比長度長?
- 6. 什麼是以字節爲單位的base64長度?
- 7. 以度爲單位轉換千字節
- 8. DB2 sql平均行長度以字節爲單位
- 9. Java中的字符串長度(以像素爲單位)
- 10. 以像素爲單位的字符串長度
- 11. 以緹爲單位的字符串長度java
- 12. 什麼是以字節爲單位的Lua數字類型長度?
- 13. xslt中字符串的字節長度
- 14. 獲取字符串的字節長度
- 15. 一個字符串的字節長度
- 16. 基於字節而非長度的字符串長度驗證
- 17. 以字節爲單位測量字符串的大小php
- 18. 以字節爲單位的UTF-8字符串大小
- 19. 如何使用Oracle中的AL32UTF字符集來確定CLOB的長度(以字節爲單位)?
- 20. 交換2個字節的位長度
- 21. 如何從幀的長度(以毫秒爲單位)查找音符的幀長,字節和整數
- 22. 如何發現std :: vector的大小/長度(以字節爲單位)?
- 23. PHP:strlen返回字符長度而不是字節長度
- 24. 將兩個字符串轉換爲相同的字節長度
- 25. 爲什麼以太網類型字段2字節的長度?
- 26. 檢查以字節爲單位
- 27. Python。通過(以字節爲單位)
- 28. 枚舉大小(以字節爲單位)
- 29. 以字節爲單位調用索引
- 30. 如何計算JavaScript中字符串的長度(以像素爲單位)?
這是一個問題嗎?投票結束。 –
假設你開始閱讀一個流,你會看到第一個字節,你知道字符集,你能告訴還有多少字節需要閱讀才能得到整個字符?任何圖書館這樣做將不勝感激。謝謝。 –