给定第一个字节(多字节字符)和字符集规范名称,如何确定字符的字节长度?
最好使用 ICU 库。
使用ICU库中的ucnv_getNextUChar。以下代码将二进制流拆分为字符并打印每个字符的大小:
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);
由于大多数原因,在设计字符集时,总是有一种方法可以通过第一个字符来确定 char 的字节长度。所以只说:
of 0xxx xxxx
110x xxxx
10xx xxxx
1110 xxxx
10xx xxxx
10xx xxxx