C++子串多字节字符

标签 c++ character-encoding wstring

我有这个 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/

相关文章:

c++ - C++中的有效循环缓冲区,将传递给C样式数组函数参数

c++ - 当 vector 增长时如何强制执行 move 语义?

C++ 20 概念中的依赖模板

c++ - std::list 线程 push_back、front、pop_front

Excel宏源代码字符编码问题

c++ - 将 LPWSTR 转换为 char*/string

java - 数据输入流和 UTF-8

c++ - 解析 C 字符串时出现 wstring_converter 异常

c++ - 如何使一个函数同时适用于字符串和 wstring?

c++ - 在 wcscpy_s 之后读取字符串的字符时出错