前幾天在測試時發現從前端訪問你資料庫出現亂碼。經過分析應該是前端和後端,後端和資料庫之間進行資料交換時編碼不一致導致的。
首先,前端通過瀏覽器向後端傳輸資料有兩種途徑:
我用的是spring+tomcat,所以要配置spring解析url時採用utf-8編碼。tomcat預設採用iso-8859-1編碼解析uri,因此具體的話應該是配置:
tomcat -> server.xml -> connector -> uriencoding。
後端向前端傳輸資料時,一般來說,response裡面寫入的時編碼後的bytes,傳到前端後,前端後再用相應的編碼解碼,就可以了。
後端與資料庫互動時,我們知道資料庫內部設定後很多編碼。以mysql為例
variable_name
value
character_set_client
latin1
character_set_connection
latin1
character_set_database
latin1
character_set_results
latin1
character_set_server
latin1
character_set_system
utf8
character_sets_dir
/usr/share/mysql/charsets/
這麼多編碼簡直讓人頭大。不過在這裡有三個編碼是動態的,有連線資料庫的客戶端決定。這三個編碼就是
character_set_client這三個編碼的作用如何,文件摘錄如下:character_set_connection
character_set_results
大概是說:
sping通過jdbc鏈結mysql,但是具體採用的編碼方式是什麼?一味的採用預設值很容易出現亂碼。因此,在配置jdbc的時候要顯式地配置編碼方式。具體就是:
在jdbc.url後新增useunicode=true&characterencoding=utf-8
學習flush與split時所遇的問題
因為region中的值都是以key來排序的,但是flush操作是生成乙個新store file hfile 那麼還怎麼保持region中key的有序呢?然後又延伸出乙個問題 flush操作生成的store file,為什麼大小不一?見下圖 與compaction有關 原因是 flush是對乙個hre...
Spring整合Shiro時記憶體溢位的問題分析
前段時間有一天系統訪問量突然增加,系統每隔一兩個小時就會由於記憶體瞬時飆公升而宕機。檢視記憶體dump檔案發現其中shiro的 session物件異常多 後來經分析才發現是由於使用spring整合shiro時配置不當導致的。當時的配置如下 sessionmanager class org.apach...
python讀取txt檔案時的中文亂碼問題
今晚在做 上的python小練習0011題時,一直出現以下 utf 8 無法decode的問題 utf8 codec can t decode byte 0xb1 in position 0 invalid start byte 即使我借鑑 中errors replace 的形式,雖然錯誤沒有了,但...