SpringMvc+thymeleaf+HTML5環境下遇到中文亂碼......
按照以往經驗逐個排查,開發環境統一為utf-8編碼,服務器也配置了編碼過濾器,tomcat也是utf-8編碼。前台頁面也是utf-8編碼的。
郁悶,到底哪里出錯了呢?
排錯1:開發者工具檢查請求,發現我的post請求體(表單)亂碼(回過頭來看,其實還是thymeleaf配置出錯引發的)
第一個坑:表單添加:accept-charset="UTF-8",請求體正常。服務器也打印出中文。
排錯2:感覺服務器應該沒問題了,可是頁面怎么還是亂碼?
百度查有人說可能是文件編碼不對,即文件編碼不是頁面中設置的utf-8,於是仔細檢查另存一下,發現依舊亂碼 ==|
排錯3:既然前台html沒問題,服務器也沒問題,那么自然而然的懷疑到了thymeleaf身上了
第二個坑:thymeleaf配置問題(java文件配置方式,xml配置一樣配上編碼就OK了)
1:模板解析器設置編碼utf-8
1 @Bean 2 public ITemplateResolver templateResolver() { 3 ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); 4 templateResolver.setPrefix("/WEB-INF/templates/"); 5 templateResolver.setSuffix(".html"); 6 templateResolver.setTemplateMode("HTML5"); 7 templateResolver.setCharacterEncoding("utf-8"); 8 templateResolver.setCacheable(false); 9 return templateResolver; 10 }
2:視圖解析器設置編碼utf-8
1 @Bean 2 public ViewResolver springThymeleafViewResolver() { 3 4 ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); 5 viewResolver.setTemplateEngine(templateEngine()); 6 viewResolver.setOrder(1); 7 viewResolver.setCharacterEncoding("utf-8"); 8 return viewResolver; 9 }
OK,解決問題。