簡體   English   中英

C ++對MBCS使用std :: string函數,對UTF-16使用std :: wstring函數

[英]C++ Using std::string functions for MBCS and std::wstring functions for UTF-16

有人處理過MBCS使用std :: string函數嗎? 例如,在CI中可以做到這一點:

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

但是在C ++中,我正在這樣做:

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

如果跟蹤字節是斜杠,那么find_last_of會在跟蹤字節處停止嗎? 同樣對於std :: wstring的問題。

如果我需要將一個字符的所有字符替換為另一個字符,請用反斜杠說所有正斜杠,這樣做的正確方法是什么? 我是否需要檢查每個字符的前導代理字節,然后跳過跟蹤? 現在,我正在為每個wchar這樣做:

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

謝謝

編輯:正如David正確指出的那樣,在處理多字節代碼頁時還有更多需要處理的內容。 微軟表示使用_mbclen處理字節索引和MBCS。 在使用ANSI代碼頁時,似乎無法可靠地使用find_last_of。

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

所以,

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

是完全正確的。

同樣,您可以將find_last_ofwstring find_last_of使用。

對於多字節ANSI代碼頁而言,它更為復雜。 您確實需要處理前導和尾部字節問題。 我的建議是,如果您確實需要處理多字節ANSI日期,請標准化為更合理的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM