編碼簡介
我們web程序在接收請求并處理過程中,如果不注意編碼格式及解碼格式,很容易導緻中文亂碼,引起這個問題的原因到底在哪裡?如何解決?我們這個小節将會讨論此問題。
說到這個問題我們先來說一說字符集。
什麼是字符集,就是各種字符的集合,包括漢字,英文,标點符号等等。各國都有不同的文字、符号。這些文字符号的集合就叫字符集。
現有的字符集ASCII、GB2312、BIG5、GB18030、Unicode等
這些字符集,集合了很多的字符,然而,字符要以二進制的形式存儲在計算機中,我們就需要對其進行編碼,将編碼後的二進制存入。取出時我們就要對其解碼,将二進制解碼成我們之前的字符。這個時候我們就需要制定一套編碼解碼标準。否則就會導緻出現混亂,也就是我們的亂碼。
2.編碼與解碼
u 編碼:将字符轉換為二進制數
漢字 |
編碼方式 |
編碼 |
二進制 |
‘中’ |
GB2312 |
D6D0 |
1101 0110-1101 0000 |
UTF-16 |
4E2D |
0100 1110-0010 1101 | |
UTF-8 |
E4B8AD |
1110 0100-1011 1000-1010 1101 |
u 解碼:将二進制數轉換為字符
1110 0100-1011 1000-1010 1101 → E4B8AD → ’中’
u 亂碼:一段文本,使用A字符集編碼,使用B字符集解碼,就會産生亂碼。所以解決亂碼問題的根本方法就是統一編碼和解碼的字符集。
3.解決亂碼:
解決方法就是統一字符編碼。
亂碼情況:
3.1接收中文請求參數
1)POST請求:post請求提交了中文。在獲取參數值之前,設置請求的解碼格式,使其和頁面保持一緻。我們以後都使用utf-8編碼,它也稱作萬國碼,集合了基本所有的字符。
解決方法:request.setCharacterEncoding("utf-8");
2)GET請求:GET請求參數是在地址後面的。不能使用上述方法。我們需要修改tomcat的配置文件。需要在Server.xml文件修改Connector标簽,添加URIEncoding="utf-8"屬性。
3.2向浏覽器發送有中文字符的響應
向浏覽器發送響應的時候,要告訴浏覽器,我使用的字符集是哪個,浏覽器就會按照這種方式來解碼。如何告訴浏覽器響應内容的字符編碼方案。很簡單。
解決方法:response.setContentType("text/html;charset=utf-8");
或者使用這兩句組合:
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type", "text/html;charset=utf-8");
我們一般使用response.setContentType("text/html;charset=utf-8");
精彩閱讀:
web前端之二叉搜索樹
web前端渲染優化
Webpack優化構建速度
常見web安全及防護原理
WebView和原生是如何通信
,