解決springmvc+mybatis+mysql中文亂碼問(wèn)題
近日使用ajax請(qǐng)求springmvc后臺(tái)查詢mysql數(shù)據(jù)庫(kù),頁(yè)面顯示中文出現(xiàn)亂碼
最初在mybatis配置如下
<select id="queryContentById" resultType = "java.lang.String" parameterType="String" >
select text from News where id=#{o}
</select>
其中表News的text字段為blob類型
如此查出的text值在控制臺(tái)中一直顯示亂碼。
之后google查找相關(guān)resultType=blob相關(guān)內(nèi)容無(wú)果,遂將其改為resultType = "java.util.Map" ,且
byte[] b = (byte[]) map.get("text");
String s = new String(b,"utf-8");
打印出s,此時(shí)中文正常顯示,但頁(yè)面顯示依舊亂碼。
因此處為ajax請(qǐng)求,遂檢查響應(yīng)頭信息,查出如下
Content-Typetext/html;charset=ISO-8859-1
由于數(shù)據(jù)庫(kù)中統(tǒng)一為編碼為utf-8,故修改響應(yīng)頭信息
@RequestMapping(value = "/queryContentById", method = RequestMethod.GET,produces = "text/plain;charset=UTF-8")
public @ResponseBody String queryContentById(@RequestParam("id") String id) throws SQLException, UnsupportedEncodingException {
Map map = (Map) ndrService.queryContentById(id);
byte[] b = (byte[]) map.get("text");
String s = new String(b,"utf-8");
return s;
}
我們?cè)賮?lái)看下另外一個(gè)示例的問(wèn)題
1、SpringMVC的Controller得到的是亂碼:
(1)在web.xml加上字符集過(guò)濾器:
(2)在JSP等頁(yè)面上修改:charset=UTF-8"和pageEncoding="UTF-8"
2、Controller讀取到的是正確的中文,但是保存到數(shù)據(jù)庫(kù)后變成“??”
(1)修改數(shù)據(jù)庫(kù)連接jdbc_url=jdbc:mysql://localhost:3306/mybatistest?useUnicode=yes&characterEncoding=UTF8("&":在xml文件中表示"&")
(2)修改數(shù)據(jù)庫(kù)的字符集為utf-8:打開(kāi)mysql根目錄下my.ini(mysql5.6為my-default.ini,要把它c(diǎn)opy一份命名為my.ini),在下面具體位置添加(或修改):
這樣設(shè)置在我這邊就沒(méi)什么問(wèn)題了。
綜述:
通常中文亂碼問(wèn)題都是由于字符編碼設(shè)置不對(duì)導(dǎo)致的,我這里無(wú)論是數(shù)據(jù)庫(kù)還是java文件、jsp文件,都統(tǒng)一成UTF-8。最后問(wèn)題解決了。
相關(guān)文章
Spring?框架中的?Bean?作用域(Scope)使用詳解
Spring框架中的Bean作用域(Scope)決定了在應(yīng)用程序中創(chuàng)建和管理的Bean對(duì)象的生命周期和可見(jiàn)性。本文將詳細(xì)介紹Spring框架中的Bean作用域的不同類型,包括Singleton、Prototype、Request、Session和Application,并解釋它們的特點(diǎn)和適用場(chǎng)景。2023-09-09
Java如何按16進(jìn)制發(fā)送和接收TCP指令
這篇文章主要介紹了Java如何按16進(jìn)制發(fā)送和接收TCP指令問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Java多線程并發(fā)生產(chǎn)者消費(fèi)者設(shè)計(jì)模式實(shí)例解析
這篇文章主要介紹了Java多線程并發(fā)生產(chǎn)者消費(fèi)者設(shè)計(jì)模式實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Java實(shí)現(xiàn)選擇排序算法的實(shí)例教程
這篇文章主要介紹了Java實(shí)現(xiàn)選擇排序算法的實(shí)例教程,選擇排序的時(shí)間復(fù)雜度為О(n²),需要的朋友可以參考下2016-05-05
Java實(shí)現(xiàn)用位運(yùn)算維護(hù)狀態(tài)碼
位運(yùn)算是一種非常高效的運(yùn)算方式,在算法考察中比較常見(jiàn),那么業(yè)務(wù)代碼中我們?nèi)绾问褂梦贿\(yùn)算呢,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2024-03-03
詳解BeanUtils.copyProperties()方法如何使用
這篇文章主要為大家介紹了詳解BeanUtils.copyProperties()方法如何使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

