linux下轉格式函數iconv段錯誤

來源:互聯網
上載者:User

標籤:unicode   utf-8   iconv   segment error   段錯誤   

今天將windows代碼移植到Linux下,其中用到了Unicode轉char的函數,被坑了一會,相關函數及編碼格式,Linux與windows不同,有幾點需要注意:

1、wchar_t 在Linux下佔用4個位元組,在windows下佔2個位元組;

2、Linux預設的文本編碼方式是UTF-8;Linux終端漢字顯示的設定方式:vi /etc/sysconfig/i18n;

設定LANG=“en_US.UTF-8”或者LANG=“zh_CN.UTF-8”;

3、iconv函數的調用方式:

iconv(iconv_t en, char** inbuf, size_t inlen, char** outbuf, size_t outlen);

段錯誤引發的關鍵之處就在這裡了。

對於輸入buffer與輸出buffer,我之前用的是數組:strin[N][strlen];而我每次只處理二維數組中的一個數組,於是inbuf = (char**)(&strin[i]);

outbuf也是以類似的方式定義的,這樣執行下去就一直報段錯誤,或者說segment error;

修改成這樣就行了:

char* intemp = strin[i];inbuf = &intemp;
outbuf也以類似的方式定義及解決問題。


4、Linux還有一個系統小工具iconv,

可以通過指令

iconv --list

來看Linux支援哪些文本格式,Unicode格式的名字可以填:UNICODE、UCS-2

還可以通過指令:

iconv -f UCS-2 -t UTF-8 test.txt -o output.txt

來測試格式轉碼是否能成功。

指令的含義:

iconv -f from_encoding -t to_encoding inputfile -o outputfile


5、另外還有個問題,在windows下通過tinyxml寫XML文本,需要指定GBK格式,而在Linux下通過tinyxml寫XML檔案需要指定UTF-8編碼;否則產生的XML檔案為亂碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.