spring開發時所遇的亂碼問題

2021-07-07 09:11:26 字數 1131 閱讀 9025

前幾天在測試時發現從前端訪問你資料庫出現亂碼。經過分析應該是前端和後端,後端和資料庫之間進行資料交換時編碼不一致導致的。

首先,前端通過瀏覽器向後端傳輸資料有兩種途徑:

我用的是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 的形式,雖然錯誤沒有了,但...