標籤: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檔案為亂碼。