我有一个存储在CString中的unicode字符串,我需要知道这个字符串采用utf-8编码的数字字节。我知道CString有一个方法getLength()
,但它会返回字符数,而不是字节数。
我尝试(除了其他东西)转换为char数组,但我得到(逻辑上,我猜)只有wchar_t
的数组,所以这不能解决我的问题。
要清楚我的目标。对于输入,让我们说"aaa"
我想要“3”作为输出(因为“a”在utf-8中占用一个字节)。但是对于输入“āaa”,我希望看到输出“4”(因为ā是两个字节的字符)。
我认为这是非常常见的请求,但即使经过1.5小时的搜索和试验,我也找不到正确的解决方案。
我对Windows编程的经验很少,所以也许我遗漏了一些关键信息。如果您有这种感觉,请告诉我,我会添加您要求的任何信息。
答案 0 :(得分:5)
将WideCharToMultiByte与输出字符集一起用作CP_UTF8
该函数将返回写入输出缓冲区的字节数,或UTF-8编码字符串的长度
LPCSTR instr;
char outstr[MAX_OUTSTR_SIZE];
int utf8_len = WideCharToMultiByte(CP_UTF8, 0, instr, -1, outstr, MAX_OUTSTR_SIZE, NULL, NULL);
转换后,您还可以在输出字符串
上使用strlen
int utf8_len = strlen(outstr);
如果您不需要输出字符串,可以简单地将输出缓冲区大小设置为0.在这种情况下,该函数将返回UTF-8中的字节数而不会输出任何内容
int utf8_len = WideCharToMultiByte(CP_UTF8, 0, instr, -1, NULL, 0, NULL, NULL);