gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:04:05 25 4
gpt4 key购买 nike

有人处理过使用 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 says use _mbclen用于处理字节索引和 MBCS。在使用 ANSI 代码页时,我似乎无法可靠地使用 find_last_of。

最佳答案

您无需对代理对执行任何特殊操作。作为代理对的一半的单个 16 位字符单元不能同时是非代理字符单元。

所以,

if( *i == L'/' )
*i = L'\\';

完全正确。

同样,您可以将 find_last_ofwstring 一起使用。

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

关于C++ 对 MBCS 使用 std::string 函数,对 UTF-16 使用 std::wstring 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10668382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com