我有这个 std::string,它包含一些跨越多个字节的字符。
当我在这个字符串上做一个子字符串时,输出是无效的,因为当然,这些字符被算作 2 个字符。在我看来,我应该改用 wstring,因为它将这些字符存储为一个元素而不是多个元素。
所以我决定将字符串复制到 wstring 中,但这当然没有意义,因为字符仍然拆分为 2 个字符。这只会让事情变得更糟。
是否有将字符串转换为 wstring 并将特殊字符合并为 1 个元素而不是 2 个元素的好的解决方案。
谢谢
最佳答案
更简单的版本。 基于提供的解决方案Getting the actual length of a UTF-8 encoded std::string?作者:马塞洛·坎托斯
std::string substr(std::string originalString, int maxLength)
{
std::string resultString = originalString;
int len = 0;
int byteCount = 0;
const char* aStr = originalString.c_str();
while(*aStr)
{
if( (*aStr & 0xc0) != 0x80 )
len += 1;
if(len>maxLength)
{
resultString = resultString.substr(0, byteCount);
break;
}
byteCount++;
aStr++;
}
return resultString;
}
关于C++子串多字节字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10846953/