在Linux下使用iconv转换字符串编码
在Linux下寫C程序,尤其是網(wǎng)絡通信程序時經(jīng)常遇到編碼轉換的問題,這里要用到iconv函數(shù)庫。
iconv函數(shù)庫有以下三個函數(shù)
| 1 2 3 4 5 6 |
?
這三個函數(shù)的功能顯而易見,分別是打開一個iconv_t句柄,轉換字符串以及關閉一個iconv_t句柄。其中有必要一說的是iconv函數(shù),這個函數(shù)十分容易用錯。
iconv函數(shù)的五個參數(shù)中,第一個參數(shù)是iconv句柄,第二、三個參數(shù)是需要轉換的字符串的地址和長度的地址,第四、五個參數(shù)是存儲結果的字符串的地址和長度的地址,注意這里傳的都是地址,因為這四個參數(shù)的值都有會被iconv函數(shù)改變。iconv會逐步的將*inbuf中的字符轉換到*outbuf中,并增加*inbuf指針減少*inbytesleft的值,以及增加*outbuf指針減少*outbytesleft的值。
iconv函數(shù)會因為以下四種原因停止并返回:
以下給出一個示例函數(shù),將一個字符串從utf-8轉換成gbk后再重新轉換成utf-8。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
?
我用的xshell連接到虛擬機,先將terminal的編碼設置為utf-8運行,結果如下
| 1 2 3 | original : 你好,中南。- Hello, CSU. to gbk : ?o?????£- Hello, CSU. gbk to utf8: 你好,中南。- Hello, CSU. |
?
再將terminal的編碼設置為gbk運行,結果如下
| 1 2 3 | original : 浣犲ソ錛屼腑鍗椼€? Hello, CSU. to gbk : 你好,中南。- Hello, CSU. gbk to utf8: 浣犲ソ錛屼腑鍗椼€? Hello, CSU. |
?
可見,在相應的編碼下,對應的字符串能正常顯示。
http://vimersu.win/blog/2014/03/04/linux-iconv/
總結
以上是生活随笔為你收集整理的在Linux下使用iconv转换字符串编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ibatis mybatis传入List
- 下一篇: Android启动Activity的两种