2013-11-04 23 views
2

的方法如何在只能接受char *和wchar_t *的情況下只能獲取存儲在char16_t的basic_string中的值的方法?將basic_string <char16_t>傳遞給只接受wchar_t *和char *

例如在cstdio中刪除。

  • cstdio中的remove函數只接受char *和wchar_t *。
  • 您不能將char16_t轉換爲wstring:link
  • 字符無法處理所有UTF-16字符
+0

參考鏈接到的同一張表:將UTF-16轉換爲多字節,將多字節轉換爲寬-chars。 –

+0

@KerrekSB一些數據將在這個過程中丟失。當你的字符串包含例如ґ字符時,你的輸出不再是「有效」的。 – Ordo

回答

2

你需要轉碼的UTF-16卡在std::basic_string<char16_t>由任何功能以std::stringchar const*作爲參數使用正確的編碼。同樣,您需要在定位基於wchar_t的序列時更改編碼。當然,由於人們拋棄了內部處理字符的想法而不是編碼,提供適當的設施來處理編碼之間的變化將是有用的。有兩種方法可以處理字節和字符之間的編碼/解碼,即std::codecvt<...>和多字節轉換功能系列(例如,mbtowc()

適合哪種轉換還取決於目標API:並非全部API可以合理處理UTF-8,這種轉換可能涉及到實際支持的字符的選擇

+0

我想支持UTF 16,所以當一個UTF 16 char acter is send我希望能夠使用那個角色。 wchar_t和char16_t都能夠支持UTF-16。爲什麼我不能在不丟失數據的情況下從這些類型轉換而來? wctomb不適用於此,您將在Windows上以UTF-8結束。例如:http://pastebin.com/MVWjxmqm – Ordo

相關問題