解決在Linux環(huán)境下訪問webservice發(fā)送中文亂碼問題的方案

首先,看在windows環(huán)境下正常顯示中文的原因:打開cmd窗口,輸入:chcp你會(huì)發(fā)現(xiàn)輸出

活動(dòng)代碼頁: 936

查閱936的意義:它指明了當(dāng)前系統(tǒng)使用的編碼,936 代表GBK 擴(kuò)展的EUC-CN 編碼( GB 2312-80編碼,包含 6763 個(gè)漢字)到Unicode (GB13000.1-93)中定義的20902個(gè)漢字,即中國(guó)大陸使用的是簡(jiǎn)體中文zh_CN。

這說明,在windows下是默認(rèn)采用的gbk方式編碼,短信也沒有中文亂碼。


接下來再看linux環(huán)境下的中文編碼格式:輸入命令cat /etc/sysconfig/i18n

?你會(huì)發(fā)現(xiàn)輸出默認(rèn)為:

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

這說明,Linux默認(rèn)支持的中文編碼為UTF-8,webservice也是以該環(huán)境中的編碼格式發(fā)送的字段。



所以出現(xiàn)了上圖中的狀況。

解決方式:修改Linux的中文編碼。

執(zhí)行命令:

vi /etc/sysconfig/i18n

?將內(nèi)容替換如下:

LANG="zh_CN.GBK"

SUPPORTED="zh_CN.UTF-8:zh_CN:zh"

SYSFONT="latarcyrheb-sun16"

?修改保存后運(yùn)行命令locale發(fā)現(xiàn)依然是utf-8編碼格式。。

注意,此時(shí)不要著急reboot(linux重啟系統(tǒng)命令,類似筆記本電腦重啟系統(tǒng),需要一段時(shí)間,有造成硬件損壞風(fēng)險(xiǎn)哦),將登陸用戶先logout再login(登出后再登入),再次運(yùn)行l(wèi)ocale命令,你會(huì)發(fā)現(xiàn)被修改成GBK了:

LANG=zh_CN.GBK

LC_CTYPE="zh_CN.GBK"

LC_NUMERIC="zh_CN.GBK"

LC_TIME="zh_CN.GBK"

LC_COLLATE="zh_CN.GBK"

LC_MONETARY="zh_CN.GBK"

LC_MESSAGES="zh_CN.GBK"

LC_PAPER="zh_CN.GBK"

LC_NAME="zh_CN.GBK"

LC_ADDRESS="zh_CN.GBK"

LC_TELEPHONE="zh_CN.GBK"

LC_MEASUREMENT="zh_CN.GBK"

LC_IDENTIFICATION="zh_CN.GBK"

LC_ALL=


但此時(shí)你有可能發(fā)現(xiàn)打印的日志又亂碼了,憋著急,不是說你的系統(tǒng)不支持gbk顯示,而是你要修改你ssh客戶端的編碼跟系統(tǒng)編碼gbk一致就ok啦~~~


修改成功之后,經(jīng)測(cè)試,發(fā)現(xiàn)通過部署到Linux環(huán)境上后,發(fā)送的短信中文顯示也不亂碼了。至于為何手機(jī)接收短信不太支持UTF-8,具體原因沒有深究。


其實(shí)這跟我前段時(shí)間做的iReport報(bào)表問題差不多,這些問題的出現(xiàn)都是由于windows和linux的一些環(huán)境差異造成的。畢竟一般情況下,開發(fā)工作是在windows下完成的,然而真正部署上線的是在linux環(huán)境中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容