最近在寫一個短信服務,很簡單就是調(diào)用移動的能力開發(fā)平臺的接口實現(xiàn)發(fā)送短信和狀態(tài)查詢;
本人開發(fā)用的是mac下 IDEA,在本地測試跑起來沒有問題,但是把class文件拷貝到window環(huán)境的tomcat下結(jié)果出現(xiàn)了對移動請求的參數(shù)中文變?的亂碼(其實是一部分)情況;代碼如下:


? ? ? ? 然后就開始了網(wǎng)上找答案的過程;
? ? ? ? 我當時第一反應是代碼肯定沒錯,因為我本地跑起來并沒有問題;然后就開始找環(huán)境的問題,那肯定是tomcat問題,順著這個思路,開始查tomcat中文亂碼問題,修改了server.xml的配置;參考鏈接:tomcat中文鏈接問題;發(fā)現(xiàn)怎么改都不起作用,失敗了;
(原因是我這的亂碼其實并不涉及前后臺的數(shù)據(jù)傳遞)
? ? 接著想辦法,我mac這邊是打包成class文件,然后放入的tomcat環(huán)境,那是不是不同的JRE對class文件解析不一致造成的?試一試。找到了文章:Java HttpClient Post請求發(fā)送數(shù)據(jù)亂碼;
當時我一看這文章就覺得找到了解決方案,修改了? $TOMCAT_HOME/bin/catalina.bat 文件,果然成功了;
(思路還是錯了,class文件是unicode編碼的,servlet傳給移動的接口的數(shù)據(jù)也是unicode編碼的,然后由httpclient處理對數(shù)據(jù)按照utf8編碼,只要我傳出去數(shù)據(jù)正確,移動那邊服務器設(shè)置utf8編碼接收,應該是沒問題);
? ? ? ? 這時出現(xiàn)了一個新的問題cmd窗體下的的tomcat下console出現(xiàn)了亂碼問題,原因是因為window默認的編碼是GBK而我的日志輸出是utf8的,華麗麗的亂碼了,還好log日志不亂碼(編輯器會解析),先上線將就用吧;參考文章:tomcat亂碼問題;
(問題到這其實是最大的,個人認為解決了,通過cmd 注冊表的編碼修改也可以實現(xiàn)console不亂碼,沒有深究下去)
? ? 項目上線,安裝到了客戶那里,客戶一看這cmd怎么亂七八糟,不行,一定要求解決;
沒辦法,再想辦法解決,靜下心來去仔細梳理思路,一步步debug打日志去看啥時候出現(xiàn)了亂碼,是否是數(shù)據(jù)庫中取出來是亂碼,然后終于發(fā)現(xiàn)了問題,我在對數(shù)據(jù)庫取出的參數(shù)操作時,加了一句轉(zhuǎn)碼new String(xx,“utf-8”),我的mac IDEA設(shè)置的是utf-8環(huán)境jdk,該參數(shù)由utf8編碼,utf8解碼,運行后生成unicode數(shù)據(jù),然后由httpClient工具類進行url編碼,沒啥問題;換到了GBK環(huán)境下,那參數(shù)轉(zhuǎn)成了utf8編碼,在GBK下就是亂碼了,亂碼以后再生成unicode編碼再utf8編碼都是亂碼了;

? ? ? 最后除去這轉(zhuǎn)碼的代碼,跨平臺不同jdk也可以使用了;
小白一枚,理解上如有問題,還請大神指出;