当前位置:  开发笔记 > 编程语言 > 正文

检查UTF-8字符串在现代C++中是否有效

如何解决《检查UTF-8字符串在现代C++中是否有效》经验,为你挑选了0个好方法。

众所周知,C++ 11的标准库允许轻松地将字符串从UTF-8编码转换为UTF-16.但是,以下代码成功转换无效的UTF-8输入(至少在MSVC2010下):

#include 
#include 
#include 

int main() {
    std::string input = "\xEA\x8E\x97" "\xE0\xA8\x81" "\xED\xAE\x8D";
    std::wstring_convert, char16_t> converter;
    try {
        std::u16string output = converter.from_bytes(input.data());
        printf("Converted successfully\n");
    }
    catch(std::exception &e) {
        printf("Error: %s\n", e.what());
    }
}

这里的字符串包含9个字节,3个代码点.最后一个代码点是0xDB8D,它是无效的(适合代理范围).

是否可以仅使用现代C++的标准库来检查UTF-8字符串的完美有效性?这里我的意思是不允许维基百科文章中描述的所有无效案例.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有