2014-01-13 40 views
-1

的字符集爲默認值,我機器中的std :: string爲GBK,我在程序中編寫的字符串是用gbk編碼的,但有時我從服務器收回數據,數據是用UTF- 8,我想確定哪個chatacter設置字符串正在使用。我看到了utf-8和gbk編碼方法,很難自行完成。確定字符串

+4

'std :: string'是編碼不可知的。它並不關心你放入它的字節的編碼。因此,它比「文本字符串」更好地描述爲「字節串」。所以聲稱「默認情況下,我的機器中的std :: string是GBK」是沒有意義的。當你從某個地方得到一個字符串時,那個地方也必須告訴你它使用了哪種編碼。你不能從字符串的內容中可靠地猜出這個。 –

回答

1

要檢查std::string是否包含UTF-8內容,請將其解碼爲UTF-8並查看它是否失敗。

若要檢查std::string是否包含GBK,請將其解碼爲GBK並查看它是否失敗。

有大量可用的轉換庫,如ICONVICU,這些庫通常預裝在大多數平臺上。或者使用平臺特定的API,如Windows上的MultiByteToWideChar()(GBK由代碼頁936和54936覆蓋,而UTF-8由代碼頁65001覆蓋)。

或者只編寫自己的解碼器(UTF-8只需要幾十行代碼)。您可以在維基百科上找到有關UTF-8GBK的位佈局的詳細信息。