有没有人处理过为MBCS使用std :: string函数?例如在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。
答案 0 :(得分:1)
您不需要对代理对做任何特别的事情。单个16位字符单元是代理对的一半,也不能是非代理字符单元。
所以,
if( *i == L'/' )
*i = L'\\';
完全正确。
同样,您可以将find_last_of
与wstring
一起使用。
对于多字节ANSI代码页,它更复杂。您确实需要处理前导和跟踪字节问题。如果你真的需要处理多字节ANSI日期,我的建议是规范化为更合理的编码。