開頭划重點!(敲黑板):rebuild和mvn package的循環往復好幾次的操作是解決這個問題的最主要的方法!
經過多次試驗,發現這樣做就可以正常顯示中文了
我說為什么有時候亂碼,有時候中文正常,原來下面的這些地方都必須設置好,特別是 rebuild和mvn package的循環往復好幾次的操作
測試發現,一般情況下,先更新maven依賴,然后build 1一次,rebuild 一次,mvn package一次,rebuild 一次,mvn package一次,一般這樣操作就成功了,
如果這樣還沒成功,那就多循環往復幾次,一般就行了,可以一個周期(也就是一個 rebuild+mvn package)看一次效果,不行就加一個周期,這樣來。
首先,在項目原有的基礎上加上
<!-- 新加了此行用於解決中文編碼問題,然后項目本身編碼必須設置為全用utf-8(在setting中設置,得把項目加進去,然后修改,修改時也選utf-8),然后打包war時多rebuild幾次,項目內整體所有地方就都不會出現中文亂碼問題了,不管是msg字段還是日志等都不會出現中文亂碼問題了,原因至今未找到 -->
<!-- 更新一下maven依賴,然后右擊項目,先build一次,然后再rebuild一次,然后再用windows資源管理器,進入項目目錄,
mvn package一次,然后再rebuild一次,然后再mvn package一次,這樣 rebuild和mvn package循環往復好幾次,這樣才能解決中文編碼問題,
這是個bug,不過終於用這種奇技淫巧實現了,網上都找不到這樣的方法,完全是因為偶然的多rebuild和mvn package幾次時,看出了解決中文編碼亂碼后的不亂碼的效果,
才發現這樣能解決中文編碼問題的,可能是rebuild項目和mvn package時出現了一些文件上的影響到字符編碼的因素,導致只有往復循環執行上面說的操作好幾次,才能夠在rebuild和mvn package 構建打包項目時正確的把支持中文編碼的代碼構建上去,可能是這個原因。 --> <value>application/json;charset=UTF-8</value>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd "> <!-- springmvc的配置文件,包含網站跳轉邏輯的控制、配置 --> <!-- 組件掃描的方式加載Handler --> <context:component-scan base-package="org.kinome" use-default-filters="true"> <!-- 只掃描控制器 其他不掃 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter> </context:component-scan> <!-- 視圖解析器 --> <!--<bean--> <!--class="org.springframework.web.servlet.view.InternalResourceViewResolver">--> <!--<property name="prefix" value="/WEB-INF/views/"></property>--> <!--<property name="suffix" value=".jsp"></property>--> <!--</bean>--> <!-- 視圖解析器 必須要開 否則使用 ModelAndView 時無法找到jsp路徑位置 這里只開視圖解析器 不使用上面那個視圖解析器的配置就行了 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" /> <!-- 兩個標准配置 --> <!-- 將springmvc不能處理的請求交給tomcat 實現動態資源和靜態資源都能處理 --> <mvc:default-servlet-handler></mvc:default-servlet-handler> <!-- 使用消息轉換器轉換編碼方式 因為spring的某個類在處理返回json時編碼指定為iso-xxx了,所以會出現中文亂碼,需要進行編碼轉換 --> <!-- 需要把這個bean放在 <mvc:annotation-driven/> 之前(上面),否則不會生效 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <!-- 因為優先級的問題 需要把 ByteArray 加在 json的前面,否則返回的文件會損壞 參考:https://blog.csdn.net/u013555226/article/details/77026068 http://www.iteye.com/topic/1125784 --> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/plain;charset=utf-8</value> <value>text/html;charset=UTF-8</value> <!-- 新加了此行用於解決中文編碼問題,然后項目本身編碼必須設置為全用utf-8(在setting中設置,得把項目加進去,然后修改,修改時也選utf-8),然后打包war時多rebuild幾次,項目內整體所有地方就都不會出現中文亂碼問題了,不管是msg字段還是日志等都不會出現中文亂碼問題了,原因至今未找到 --> <!-- 更新一下maven依賴,然后右擊項目,先build一次,然后再rebuild一次,然后再用windows資源管理器,進入項目目錄, mvn package一次,然后再rebuild一次,然后再mvn package一次,這樣 rebuild和mvn package循環往復好幾次,這樣才能解決中文編碼問題, 這是個bug,不過終於用這種奇技淫巧實現了,網上都找不到這樣的方法,完全是因為偶然的多rebuild和mvn package幾次時,看出了解決中文編碼亂碼后的不亂碼的效果, 才發現這樣能解決中文編碼問題的,可能是rebuild項目和mvn package時出現了一些文件上的影響到字符編碼的因素,導致只有往復循環執行上面說的操作好幾次,才能夠在rebuild和mvn package 構建打包項目時正確的把支持中文編碼的代碼構建上去,可能是這個原因。 --> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean> <!-- 支持springmvc一些更加高級的功能 比如 jsr303校驗 快捷的ajax請求 映射動態請求 xxx --> <mvc:annotation-driven/> <!-- location元素表示web目錄下的static包下的所有文件; mapping元素表示以/static開頭的所有請求路徑,如/static/a 或者/static/a/b; 該配置的作用是:DispatcherServlet不會攔截以/static開頭的所有請求路徑,並當作靜態資源 交由Servlet處理 --> <mvc:resources mapping="/static/**" location="/static/"/> <!--導入文件上傳配置--> <!-- SpringMVC上傳文件時,需要配置MultipartResolver處理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> <!-- 指定所上傳文件的總大小不能超過10MB 10240KB。注意maxUploadSize屬性的限制不是針對單個文件,而是所有文件的容量之和 --> <property name="maxUploadSize" value="10240000"/> </bean> <!-- SpringMVC在超出上傳文件限制時,會拋出org.springframework.web.multipart.MaxUploadSizeExceededException --> <!-- 該異常是SpringMVC在檢查上傳的文件信息時拋出來的,而且此時還沒有進入到Controller方法中 --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <!-- 遇到MaxUploadSizeExceededException異常時,自動跳轉到 /views/errorPage/fileSizeIsTooLarge.jsp 頁面 --> <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException"> /views/errorPage/fileSizeIsTooLarge.jsp </prop> </props> </property> </bean> </beans>
然后,把項目本體字符全部設置為utf-8:
注意:這里需要+一個項目,然后點擊修改來修改它的編碼
這里需要把項目加進去后再修改,修改后idea的配置文件也會更新,這里用git看到更新了
這個settings是分項目的,也就是說不同的項目設置是不同的,所以這里只有它自己,另一個項目是看不到這個設置路徑的
然后,關鍵來了!
重點是: 我的是idea的maven的ssm項目,我發現項目在需要打包時,必須先
更新一下maven依賴,然后右擊項目,先build一次,然后再rebuild一次,然后再用windows資源管理器,進入項目目錄,
mvn package一次,然后再rebuild一次,然后再mvn package一次,這樣 rebuild和mvn package循環往復好幾次,這樣才能解決中文編碼問題,
這是個bug,不過終於用這種奇技淫巧實現了,網上都找不到這樣的方法,完全是因為偶然的多rebuild和mvn package幾次時,看出了解決中文編碼亂碼后的不亂碼的效果,
才發現這樣能解決中文編碼問題的,可能是rebuild項目和mvn package時出現了一些文件上的影響到字符編碼的因素,導致只有往復循環執行上面說的操作好幾次,才能夠在rebuild和mvn package 構建打包項目時正確的把支持中文編碼的代碼構建上去,可能是這個原因。
下面是成功實現的效果: