2015-05-14 61 views
0

我有一個字節數組轉換字節數組爲UTF-8

uint8_t array[] = {0x00, 0x72, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74}; 

我知道的是,在這個文本是「根」; 我有一個函數應該將utf-16轉換爲utf-8。下面是代碼:

​​

它的偉大工程與西里爾(它從0×04),但是當我試圖把我的陣列中,我得到的東西,如:

爀漀漀琀開㌀㜀 

等... 這裏有什麼問題?

+2

它試圖從utf16-le轉換爲utf8。你需要通過向iconv調用添加一個標誌或其他東西來告訴它使用utf16-be,或者你可以在前面添加一個[byte-order-mark](http://en.wikipedia.org/wiki/Byte_order_mark)的陣列。 – programmerjake

+0

用空格縮進代碼。 – chqrlie

+0

你是對的!工作!謝謝! – RedCollarPanda

回答

3

必須爲UTF-16輸入指定字節順序。既然你傳遞一個utf16-be(大端)編碼的緩衝區,你應該用適當的字節順序標記前綴是:

uint8_t array[] = { 0xfe, 0xff, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74 }; 

但是,這將產生一個字節順序標記的UTF-8輸出,你可能不想。最有效的方法是用這種方法指定字節序:

ucnvConvert("UTF-16BE", "UTF-8", from, to);