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

时间:2012-05-19 19:47:39

标签: c++ windows string utf-16 mbcs

有没有人处理过为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。

1 个答案:

答案 0 :(得分:1)

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

所以,

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

完全正确。

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

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