天突然想到之前的一個項目,是和另一個公司合作,我提供后臺,對方寫小程序調用我的接口,我本地測試好接口后,是沒有問題的,然后部署到對方服務器(windows系統),接著就是出先各種各樣的亂碼問題,在這里匯總記錄下,以便后面學習。
java亂碼出現的問題有很多,這里主要記錄下tomcat,log4j,mysql,jsp,html,http(get,post請求亂碼處理)。常見的問題可能是tomcat,http請求亂碼問題了,至于jsp和html的亂碼問題就很簡單了,相信大家也知道,我也就不多說了,首先來說下tomcat的亂碼問題,
一個是程序需要發送http GET請求到服務器,請求的參數中包含了中文字符。程序中參數為UTF-8格式,且經過了UTF-8 URL編碼再發送。使用的tomcat服務器,但服務器端后臺程序中取到的參數的中文是亂碼。
解決辦法:修改Tomcat的Server.xml,在Connector標簽中加上URLEncoding參數。
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="99" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
另一個是tomcat控制臺打印亂碼,程序中輸出到tomcat控制臺的中文信息亂碼了,
解決辦法:打開文件/tomcat/bin/catalina.bat,然后設置set JAVA_OPTS= 的內容中添加選項-Dfile.encoding=UTF-8即可,當然,我不敢包證,但是我的就是這么處理然后就可以了。
然后是log4j的日志打印亂碼,這個亂碼也是打印在tomcat控制臺的時候亂碼,但是日志文件卻不會,而且我本地測試的時候打印也不會亂碼
而且我配置的也是utf-8,這個曾經讓我惱火好久,后面我偶然在一篇博客上發現,說有些服務器你配utf-8是不行的,他的是編碼就是GBK,我就權當試試,沒想到還真是這個問題,這也是讓我很無語,,,,
然后就是http請求的亂碼,我這個亂碼問題是我在shiro判斷是否登錄的時候,因為我是前后端分離,所以我shiro判斷未登錄的時候,是返回狀態碼和提示信息,而不是跳轉登錄頁面,我用response返回中文提示信息是,結果返回的是亂碼,可是我明明設置了
res.setCharacterEncoding("utf-8");
可是到前端頁面的時候還是亂碼了,這讓我很費解,后面我仔細想了下,我服務端是設置了返回utf-8的編碼,但是瀏覽器是用utf-8去解析的嗎?后面去查了下還要加一條配置,
res.setContentType("text/html;charset=utf-8");
之前知道有這個配置,但是一直不知道有什么區別,今天算是明白了一點,這個就是告訴瀏覽器,你要用什么編碼去解析這個數據。
最后一個是mysql 中文的亂碼了,這個著實讓我煩惱了好久,我去網上查了,說建表的時候要設置utf-8的編碼,可是我在新建數據庫的時候就設置了默認就是utf-8的編碼,然后我說要配置數據庫的默認編碼,修改mysql配置文件/etc/my.cnf。
[mysqld] character-set-server=utf8 [client] default-character-set=utf8 [mysql] default-character-set=utf8
我設置好這個以后,終于不會亂了,但是,,保存進去的中文居然全部變成了???號,于是又去奔波了,
通過這個命令,我們可以看到,我們服務端居然還不是utf-8???
這讓我很傷,終于,尋的良方,
只要在數據庫properties文件的連接信息里加兩個參數
?useUnicode=true&characterEncoding=utf-8
就可以了,唉,真是一波三折啊,
真是與服務器斗,其樂無窮;與數據庫斗,其樂無窮;與瀏覽器斗,其樂無窮啊
文亂碼問題是比較常見和煩人的問題,本文通過一個小程序介紹了如何通過Servlet從上一個頁面獲取參數,
方法很簡單:調用request.getParameter(String s)方法。
解決中文亂碼問題的方法是:
首先要設置response響應的格式:response.setContextType("text/html;charSet=GBK");
然后在加上request.setCharacterEncoding("GBK")
需要注意的是這是解決post方式提交的內容的中文亂碼問題。
解決get方式提交內容的中文亂碼問題的方法:
在Tomcat->conf文件夾->server.xml-->connecter標簽里加上:
URIEncoding="GBK"(注意:在xml里面“=”兩邊不要有空格)
關于Post和Get之間的區別可以看我轉載的另一篇博文:
HTTP POST GET 本質區別詳解
例子:
1.threeparams.html
2.ThreeParams.java
補充:
上面的這個例子.html中每個name都不一樣,如果有多個一樣的name時,可以按如下的方法來獲?。?/p>
1)Enumeration paramNames = request.getParameterNames()
調用此方法獲得所有參數的名字,返回一個Enumeration
2) while(paramNames.hasMoreElements()){
String paramName = (String)paramNames.nextElement();
String[] paramValues = request.getParameterValues(paramName);
...
時為了在文檔中插入其他內容,我們一般會將內容導出成網頁后再以超鏈接的形式添加,但有時將PDF轉成HTML網頁后,原來文檔中的表格排版卻全亂了是怎么回事?
比如下圖所示,原文檔是一個簡單的含表格的PDF文檔,轉出來HTML后卻成了每行一個字,排版亂的沒法看:
那么如何有效避免這種情況并完整的將PDF文檔轉成一樣的網頁呢?
首先用極速PDF編輯器打開PDF文檔,接著選擇工具欄中的“超鏈接工具”并按住鼠標左鍵選中表格區域;
然后在彈出的“鏈接屬性”窗口中的“類型”下拉選項中選擇“表格框”,并根據文檔內容設置應用頁面范圍后,點擊“確定”即可。
回到文檔頁面可以看到框選的表格區域出現藍色的超鏈接標識,這時就已經做好了,接下來驗證下效果。
先選擇工具欄中的“手形工具”后,在文檔處右擊選擇“導出”—“頁面為”
接著根據頁面提示設置要導出為HTML網頁的頁面范圍后,點擊右側的確定即可。
這時再次打卡導出的網頁可以看到表格被完整且保留原格式導出。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。