0

有没有人处理过为 MBCS 使用 std::string 函数?例如在 CI 中可以这样做:

p = _mbsrchr(path, '\\');

但在 C++ 中,我正在这样做:

found = path.find_last_of('\\');

如果尾随字节是斜线,那么 find_last_of 会在尾随字节处停止吗?对于 std::wstring 也是同样的问题。

如果我需要用另一个字符替换所有一个字符,请用反斜杠说所有正斜杠,这样做的正确方法是什么?我是否必须检查每个字符的前导代理字节然后跳过线索?现在我正在为每个 wchar 执行此操作:

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

谢谢

编辑:正如大卫正确指出的那样,在使用多字节代码页时需要处理更多。微软表示使用 _mbclen处理字节索引和 MBCS。在使用 ANSI 代码页时,我似乎无法可靠地使用 find_last_of。

4

1 回答 1

1

你不需要对代理对做任何特别的事情。作为代理对的一半的单个 16 位字符单元也不能是非代理字符单元。

所以,

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

是完全正确的。

同样,您可以使用find_last_ofwith wstring

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

于 2012-05-19T19:52:09.687 回答