簡體   English   中英

將char *轉換為wchar_t *時如何設置setLocale?

[英]How to setLocale when converting char* to wchar_t*?

我不會撒謊,我從https://stackoverflow.com/a/8032109/866333捏住了這段代碼:

std::wstring *GetWC(const char *c)
{
    const size_t cSize = strlen(c)+1;
    std::wstring wc( cSize, L'#' );
    mbstowcs( &wc[0], c, cSize );
    //wchar_t wc[cSize];
    //mbstowcs (wc, c, cSize);

    return wc;
}

我試圖確定是什么意思,例如:

記住在main中設置相關的語言環境。

例如,setlocale(LC_ALL,“”)。

以我為例,我從文件中讀取UTF-8(最初是ISO 8859-1,但那是破壞性的東西),我相信我所有的文字都是ISO 8859-1,因為這是我的語言環境,並且我有太多源文件無法輕松轉換在Windows中。 我的目標是Android。 我有點希望混合使用ISO 8859-1和UTF-8! 我必須轉換成一個嗎?

讓我說對了,我需要setLocale來委托轉換例程嗎? 就像我讓他們拍拍一樣! 我熱衷於效率,但這似乎與可能的靜態全局變量搞混了嗎? 如果語言環境最初完全不同,那么這勢必會帶來副作用?

如果沒有setLocalembstowcs將使用https://stackoverflow.com/a/4826290/866333

wchar_t  ws[100];
swprintf(ws, 100, L"%hs", "ansi string");

還有可能嗎? 我的libc手冊中看不到%hs。

setLocale可以避免將完整的8位(ASCII / ISO-8859-1)轉換為多字節UTF-8,從而節省字符串操作?

很抱歉有這么多問題。

無需使用setLocale您可以輕松完成

swprintf(ws, 100, L"%s", "ansi string");

現場演示

暫無
暫無

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

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