std::string 上的 substr 无法正常工作,因为存在一些不可见但看起来像空格的字符
substr on std::string doesn't work correctly due to presence of some characters that are invisible, but look like spaces
我有一个 std::string
,其中包含我看不到的字符,例如 xc2
等。
我想要字符串的子字符串,因为字符的存在诸如"时,我的字符串无法正常工作。尽管解决了这个问题,但我不希望其他任何角色弄乱这个问题。如何解决这个问题?[我只想用空格替换所有这些不必要的字符。]
您的文本很可能是UTF-8 Unicode(这是当今最常见的编码)。 XC2是可能"无爆破空间"(C2 A0)字符或类似内容的多字节编码的一部分。STD :: String和子字符串在字节上运行,并且完全不知道您具有Unicode,并且某些对字节不应拆分。您还将获得不正确的角色计数,不正确的资本化和其他奇怪的效果。
处理此问题的正确方法是使用正确实现Unicode的库。这意味着用Unicode Aware Araine替换程序中的所有字符串。
我知道这有点工作,但是另一种选择是,您今天和明天在其他地方找到了另一个操作,可以做错事。
您可以使用std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t>
。
std::u16string
示例:
#include <codecvt>
//Something...
std::string hello = "H€llo World";
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> convert;
std::u16string hello_word_u16 = convert.from_bytes(hello);
std::string hello_world_u8 = convert.to_bytes(hello_word_u16);
使用U16(char16_t),您不需要关心双字节编码字符。
相关文章:
- std::vector的包装器,使数组的结构看起来像结构的数组
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 尽管一切看起来都很好,但值不会交换
- 自制的上衣:看起来一样,但不完全相同
- 如何使它看起来像正在下的雪
- 如何用逗号分隔输出?如何改进此代码以使其看起来更体面?
- 我的代码看起来不错,但某些输入会导致不需要的输出
- 为什么这个结构的大小是 40,而它看起来应该是 12/24?
- 我需要将阵列样式的邻接矩阵转换为矢量样式(以使其看起来更好)
- 结构化绑定:当某些内容看起来像引用并且行为类似于引用,但它不是引用时
- 如何使QTextEdit看起来被禁用
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 看起来如此主要的错误.cpp:(.text.startup+0xd6):未定义对"vtable for Counter"的引用?
- C 时间测量看起来太慢了
- 我应该如何使 std::filesystem 看起来符合 Visual Studio 2015 的标准
- 写入.ini文件 - SimpleIni SetValue 尽管看起来成功了,但什么也没做
- std::string 上的 substr 无法正常工作,因为存在一些不可见但看起来像空格的字符
- 使标题看起来像它们在不同的文件夹中
- 我如何编写看起来像方法的lambda表达式