簡體   English   中英

使用mbsnrtowcs進行多字節到Widechar的轉換

[英]Multi-Byte to Widechar conversion using mbsnrtowcs

我正在嘗試將多字節(UTF)字符串轉換為Widechar字符串,並且mbsnrtowcs總是失敗。 這是輸入和期望的字符串:

char* pInputMultiByteString = "A quick brown Fox jumps \xC2\xA9 over the lazy Dog.";
wchar_t* pExpectedWideString = L"A quick brown Fox jumps \x00A9 over the lazy Dog.";    

特殊字符是版權符號。

當我使用Windows MultiByteToWideChar例程時,此轉換工作正常,但是由於該API在Linux上不可用,因此我必須使用mbsnrtowcs-失敗了。 我也嘗試過使用其他字符,但它總是失敗。 唯一的期望是,當我僅使用基於ASCII的輸入字符串時,mbsnrtowcs可以正常工作。 我究竟做錯了什么?

UTF不是多字節字符串(盡管確實會使用1個以上的字節來表示unicode字符)。 多字節字符串是使用特定代碼頁表示字符的字符串,其中一些將使用多個字節。

由於您要合並ANSI字符和UTF字符,因此應使用UTF8。

因此,無法嘗試使用mbsnrtowcs將UTF轉換為wchar_t (在Windows上為UTF16,在Linux上為UTF32)。

如果您使用UTF8,則應該查看UNICODE處理庫。 對於大多數任務,我建議使用http://utfcpp.sourceforge.net/中的 UTF8-CPP

您可以在Wikipedia上閱讀有關UNICODE和UTF8的更多信息。

MultiByteToWideChar具有用於指定代碼頁的參數,但mbsnrtowcs沒有。 在Linux上,是否在語言環境中設置LC_CTYPE以指定UTF-8?

解決方案:默認情況下,每個C程序都使用“ C”語言環境,因此我必須調用setlocale(LCTYPE,“”)..“”意味着它將使用我環境的語言環境,即en_US.utf8,並且轉換成功。

暫無
暫無

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

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