C++ 对 MBCS 使用 std::string 函数,对 UTF-16 使用 std::wstring 函数

C++ Using std::string functions for MBCS and std::wstring functions for UTF-16

本文关键字:函数 std 使用 wstring UTF-16 C++ MBCS string      更新时间:2023-10-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_ofwstring一起使用。

对于多字节 ANSI 代码页,它更复杂。您确实需要处理前导字节和尾迹字节问题。我的建议是,如果您真的必须处理多字节 ANSI 日期,请规范化为更合理的编码。

相关文章: