乱码的根本原因是字节和字符的问题(转)
1,為什么會出現(xiàn)亂碼
? ? ?亂碼的根本原因是字節(jié)和字符的問題。
? ? ?我們在大學(xué)學(xué)習(xí)c的時(shí)候,老師就有介紹字符和字節(jié)。
? ? ?字節(jié)由8個(gè)bit位表示,最早的編碼是ASCII碼,ASCII碼是單字節(jié)的編碼字符。因?yàn)閱巫止?jié)8個(gè)bit位對于中文字符和其他國家的字符來說根本不夠用,需要更多的bit位來表示字符。我們現(xiàn)在常見的編碼有GBK,BIG5,GB2312,UTF-8,通過編碼映射表可以確定bit位和字符之間的映射關(guān)系。
? ? 一個(gè)應(yīng)用從服務(wù)端把需要展現(xiàn)的文字換成一段字節(jié)流傳輸給瀏覽器,瀏覽器把字節(jié)流組裝字符展現(xiàn)的過程一般是這樣(應(yīng)用的編碼是GBK):
? ? 服務(wù)端:String text->getBytes("GBK")->byte[] bytes
? ? 瀏覽端:byte[] bytes->new String("bytes","GBK") ->String text
? ?如果字節(jié)流處理的轉(zhuǎn)換過程使用編碼不一致就會出現(xiàn)亂碼問題。
2,常見的亂碼現(xiàn)象
? ? a,提交表單的時(shí)候出現(xiàn)亂碼(頁面編碼和服務(wù)端編碼不一致)
? ? ? 頁面是jsp的時(shí)候,會經(jīng)常出現(xiàn)的問題,這個(gè)比較容易發(fā)現(xiàn)和修改,只要改下jsp文件的頭就可以了。
? ? ??<%@ page contentType="text/html;charset=GB2312" language="java" ?%>
? ? b,系統(tǒng)之間接口調(diào)用出現(xiàn)亂碼(如果兩個(gè)應(yīng)用的編碼格式不一致,get和post方式都是會出現(xiàn)亂碼問題的)
? ? ? ?今天遇到一個(gè)問題,系統(tǒng)A調(diào)用我們的http接口他們提交過來的數(shù)據(jù)是亂碼,主要是因?yàn)閮蓚€(gè)系統(tǒng)的編碼格式不一致。我們的應(yīng)用是GBK,對方的是UTF-8。
? ? ? ?解決方法是:
? ? ? ? ? ?需要他們重新指定下http request的編碼格式。
? ?c,和前端交互的時(shí)候容易出現(xiàn)亂碼(同一個(gè)應(yīng)用get方式)
? ? ? ?頁面腳本傳種中文到后臺的時(shí)候會出現(xiàn)亂碼,而且中文編碼是不同的瀏覽器有各自的實(shí)現(xiàn),后端想用?new String(“亂碼”.getBytes(“GBK”),”UTF-8”)這種方式 ?
? ? ? ?去還原字符,最后得到是問號。
? ? ? ? 前端來說最簡單的解決方式是用js對頁面上傳輸?shù)胶笈_的中文進(jìn)行encodeURI編碼,傳到服務(wù)端如果是進(jìn)行decode。
? ? ? (tomcat默認(rèn)會先進(jìn)行一次decode,所有有時(shí)候js會對中文進(jìn)行2次編碼)
? ? ? ?另外一種get方式亂碼的解決方式是修改容器的encodingURI來實(shí)現(xiàn)。
? ? ? ?jboss :?修改?/server/default/deploy/jbossweb.sar/server.xml? ? ? ? ? ? ??
| <Connector port="6666"?address="${jboss.bind.address}" ??maxThreads="150"?minSpareThreads="25"?maxSpareThreads="75" ??enableLookups="false"?redirectPort="8443"?acceptCount="100" ??connectionTimeout="20000"?disableUploadTimeout="true"?<span style="color: #ff0000;">URIEncoding="GBK"</span>/> |
tomcat:/conf/server.xml
| <Connector connectionTimeout="20000"?port="8080"?protocol="HTTP/1.1" ????redirectPort="8443" ????URIEncoding="UTF-8"?/> |
?
?
? ? ? ? ? ? ? ? ?
?
? ? ? ?
? ??https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/
http://www.cnblogs.com/iusmile/archive/2012/06/01/2531262.html
轉(zhuǎn)載于:https://www.cnblogs.com/softidea/p/3907135.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的乱码的根本原因是字节和字符的问题(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动端重构系列6——切入切出动画
- 下一篇: php-mysql管理利器 admine