的方法如何在只能接受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字符
的方法如何在只能接受char *和wchar_t *的情況下只能獲取存儲在char16_t的basic_string中的值的方法?將basic_string <char16_t>傳遞給只接受wchar_t *和char *
例如在cstdio中刪除。
你需要轉碼的UTF-16卡在std::basic_string<char16_t>
由任何功能以std::string
或char const*
作爲參數使用正確的編碼。同樣,您需要在定位基於wchar_t
的序列時更改編碼。當然,由於人們拋棄了內部處理字符的想法而不是編碼,提供適當的設施來處理編碼之間的變化將是有用的。有兩種方法可以處理字節和字符之間的編碼/解碼,即std::codecvt<...>
和多字節轉換功能系列(例如,mbtowc()
。
適合哪種轉換還取決於目標API:並非全部API可以合理處理UTF-8,這種轉換可能涉及到實際支持的字符的選擇
我想支持UTF 16,所以當一個UTF 16 char acter is send我希望能夠使用那個角色。 wchar_t和char16_t都能夠支持UTF-16。爲什麼我不能在不丟失數據的情況下從這些類型轉換而來? wctomb不適用於此,您將在Windows上以UTF-8結束。例如:http://pastebin.com/MVWjxmqm – Ordo
參考鏈接到的同一張表:將UTF-16轉換爲多字節,將多字節轉換爲寬-chars。 –
@KerrekSB一些數據將在這個過程中丟失。當你的字符串包含例如ґ字符時,你的輸出不再是「有效」的。 – Ordo