2012-05-19 82 views
0

有沒有人處理過使用MBD的std :: string函數?例如,在C I可以這樣做:C++對於MBCS使用std :: string函數,對於UTF-16使用std :: wstring函數

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

但在C++我這樣做:

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

如果尾字節是斜線,然後將在尾字節find_last_of停止?對於std :: wstring也是同樣的問題。

如果我需要用另一個字符替換所有的字符,用反斜槓說出所有的正斜槓,那麼正確的方法是什麼?我需要檢查每個字符的領先代理字節,然後跳過蹤跡嗎?現在我這樣做對每個WCHAR:

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

感謝

編輯:正如大衛正確地指出,還有更多的處理多字節代碼頁中工作時用。 Microsoft says use _mbclen用於處理字節索引和MBCS。在使用ANSI代碼頁時,我看不到可以可靠地使用find_last_of。

回答

1

您不需要對代理對做任何特殊的處理。代理對的一半的單個16位字符單位不能也是非代理字符單位。

所以,

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

是完全正確的。您也可以使用find_last_ofwstring

對於多字節ANSI代碼頁更復雜。你確實需要處理lead和trail字節的問題。我的建議是規範化爲更合理的編碼,如果你真的必須處理多字節ANSI日期。

+0

等待是否也適用於MBCS? – loop

+0

是什麼編碼?安思? –

+0

大衛是的,ANSI代碼頁也是如此。因爲我非常確定MBCS可以在跟蹤字節中給出斜線字符。你知道我應該在這種情況下做什麼。並感謝你的回答迄今爲止 – loop

相關問題