C ++中CString的字节数

时间:2014-04-20 01:27:38

标签: c++ unicode mfc cstring

我有一个存储在CString中的unicode字符串,我需要知道这个字符串采用utf-8编码的数字字节。我知道CString有一个方法getLength(),但它会返回字符数,而不是字节数。

我尝试(除了其他东西)转换为char数组,但我得到(逻辑上,我猜)只有wchar_t的数组,所以这不能解决我的问题。

要清楚我的目标。对于输入,让我们说"aaa"我想要“3”作为输出(因为“a”在utf-8中占用一个字节)。但是对于输入“āaa”,我希望看到输出“4”(因为ā是两个字节的字符)。

我认为这是非常常见的请求,但即使经过1.5小时的搜索和试验,我也找不到正确的解决方案。

我对Windows编程的经验很少,所以也许我遗漏了一些关键信息。如果您有这种感觉,请告诉我,我会添加您要求的任何信息。

1 个答案:

答案 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);