2013-11-01 122 views
0

如何使用_wcstombs_l函數將UNICODE字符串轉換爲UTF-8?我想我需要傳入一個UTF-8 _locale_t,但我不知道如何創建這種類型的變量。需要_wcstombs_l的工作示例代碼

+0

第一個結果在谷歌工作示例 - [http://msdn.microsoft.com/en-us/library/5d7tc9zw.aspx] – Leon

+0

請閱讀我的問題 - 我想轉換爲UTF-8。 – nim

回答

1

你不能 - UTF-8不是真正的ANSI代碼頁,沒有使用它的語言環境。改爲使用WideCharToMultiByte(CP_UTF8, ...)

你應該創建一個_locale_t論據_wcstombs_l_create_locale功能。 Its documentation狀態,我引用:

區域參數可以採取一個區域名稱,語言的字符串,一門語言的字符串和國家/地區代碼,一個代碼頁面,或語言字符串,國家/地區代碼和代碼頁。除了需要每個字符超過兩個字節的代碼頁外,可用語言環境名稱,語言,國家/地區代碼和代碼頁集包含Windows NLS API支持的所有內容,例如UTF-7和UTF- 8。如果您提供的代碼頁像UTF-7或UTF-8,_create_locale失敗並返回NULL

強調我的。

+0

好的...這意味着我對這個方便的功能有一個誤解。 :-( – nim

+0

我遇到了這個問題:http://stackoverflow.com/questions/7859638/stumped-with-unicode-boost-c-codecvts。我認爲它很可能使用_locale_t從/轉換爲UTF-8參數,但不知道如何在不使用boost的情況下創建語言環境 – nim

+1

'std :: locale'和'_locale_t'是兩種不同的野獸,後者是微軟特有的發明,用於微軟特定的C風格庫像_wcstombs_l這樣的調用,你可以用一個(不用說)微軟特定的函數'_create_locale'來創建一個。 –