C++ 对 MBCS 使用 std::string 函数,对 UTF-16 使用 std::wstring 函数
C++ Using std::string functions for MBCS and std::wstring functions for UTF-16
>有没有人处理过使用 std::string 函数进行 MBCS?例如,在 C 中我可以这样做:
p = _mbsrchr(path, '');
但在C++我正在这样做:
found = path.find_last_of('');
如果尾迹字节是斜杠,那么find_last_of会停在尾迹字节吗?std::wstring也有同样的问题。
如果我需要用另一个字符替换所有字符,请说所有正斜杠和反斜杠,正确的方法是什么?我是否必须检查每个字符的前导代理字节,然后跳过跟踪?现在我正在为每个 wchar 执行此操作:
if( *i == L'/' )
*i = L'';
谢谢
编辑:正如David正确指出的那样,在使用多字节代码页时还有更多需要处理的问题。Microsoft说使用_mbclen来处理字节索引和MBCS。在使用 ANSI 代码页时,我似乎无法可靠地使用find_last_of。
您无需对代理项对执行任何特殊操作。作为代理项对的一半,单个 16 位字符单元也不能是非代理项字符单元。
所以
if( *i == L'/' )
*i = L'';
是完全正确的。
同样,您可以将find_last_of
与wstring
一起使用。
对于多字节 ANSI 代码页,它更复杂。您确实需要处理前导字节和尾迹字节问题。我的建议是,如果您真的必须处理多字节 ANSI 日期,请规范化为更合理的编码。
相关文章:
- 无法引用该函数" std:: variant <_Types...> operator =",因为此函数已被删除
- 错误:使用已删除的函数"std::unique_ptr<...>
- 我有模板功能.通过使用函数std::for_each,用这个容器中的最大数字替换每个正数
- 如何使用函数std::min()来计算最小值
- 删除了 g++ 在 linux 中basic_stringstream函数 std
- 如何在 c++ 中使用返回类型导出函数 std::map
- 错误:使用已删除的函数"std::atomic<_Tp>::atomic() [_Tp = node]"
- 使用 SFINAE 检查函数 std::to_string 是否存在类型
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误
- 为什么函数 std::basic_streambuf::setg() 需要非常量 agruments
- C++将已删除的函数 std::unique_ptr 与基类一起使用
- 奇怪的错误:当没有真正创建指针时,使用已删除的函数'std::unique_ptr<_Tp,_Dp>::unique_ptr
- 通过模板构造函数(std ::功能和迷你案例)将构造函数触发
- 错误:使用已删除的函数"std::atomic<_Tp>::atomic()
- 错误:使用已删除的函数std::basic_ofstream(OpenCV和C++11)
- 类成员容器迭代器在成员函数std::find中不兼容,但为什么不兼容呢
- 没有构造函数 std::istream_iterator 的实例
- 错误:没有与参数列表匹配的重载函数"std::make_shared"实例
- 错误:使用已删除的函数"std::thread::thread(const std::thread&)"
- 不能在没有对象的情况下调用成员函数 std::string class::function()