2013-02-05 56 views
0

我的輸入是Unicode字符,例如:「(U + 00DB)(U + 0081)」(wchar_t *)。我使用wcstombs將這個寬字符串轉換爲char *(MBCS)。由於Unicode已經以UTF-8編碼,因此我期望它能以字節複製的Unicode序列作爲DB81 char *返回。但相反,我得到c3 9b。這發生在Linux上,在Windows上我只能得到「DB 81」。使用wcstombs()將wchar_t *(包含Unicode)轉換爲MBCS(char *),取決於語言環境

我需要打開名稱爲DB 81的文件(如hexdump所示),但fopen使用char * filename。因此我必須將此wchar_t *轉換爲MBCS。請幫忙!!

+0

「由於Unicode已經以UTF-8編碼」 - 在這種情況下不是這樣。任何平臺上的'wchar_t *'都不會編碼爲UTF-8。根據平臺的不同,wchar_t類型可能是16位或32位,因此編碼爲UTF-16或UTF-32。轉換爲MBCS與轉換爲UTF-8不同,除非您使用的是UTF-8語言環境/代碼頁。如果你想將UTF-16/UTF-32轉換爲UTF-8,你應該使用ICONV,ICU或其他Unicode庫來爲你做。 –

回答

0

不,你想要做的不是你認爲你應該做的。

fopen(),在任何情況下 - 無法處理系統上所有可能的文件名,因爲它缺少對Unicode的支持。

請參閱http://www.utf8everywhere.org以瞭解如何使用_wfopen()來完成此操作。

相關問題