整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          java之學習篇-亂碼問題匯總

          天突然想到之前的一個項目,是和另一個公司合作,我提供后臺,對方寫小程序調用我的接口,我本地測試好接口后,是沒有問題的,然后部署到對方服務器(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


          1. <html>
          2. <body>
          3. <form method="post" action="Threeparams">
          4. <table>
          5. <tr>
          6. <td>
          7. param1
          8. </td>
          9. <td>
          10. <input name="p1" type="text"/>
          11. </td>
          12. </tr>
          13. <tr>
          14. <td>
          15. param2
          16. </td>
          17. <td><input name="p2" type="text"/>
          18. </td>
          19. </tr>
          20. <tr>
          21. <td>
          22. param3
          23. </td>
          24. <td><input name="p3" type="text"/>
          25. </td>
          26. </tr>
          27. <td><input type="submit" value="submit">
          28. </td>
          29. </tr>
          30. </table>
          31. </form>
          32. </body>
          33. </html>

          2.ThreeParams.java


          1. import java.io.*;
          2. import javax.servlet.ServletException;
          3. import javax.servlet.http.*;
          4. public class ThreeParams extends HttpServlet{
          5. @Override
          6. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
          7. throws ServletException, IOException {
          8. doPost(req,resp);
          9. }
          10. @Override
          11. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
          12. throws ServletException, IOException {
          13. resp.setContentType("text/html;charset=GBK");
          14. //解決post方式提交內容的中文亂碼
          15. //一定要卸載存取第一個參數之前
          16. //不要調用resp.setCharacterEncoding("GBK");
          17. req.setCharacterEncoding("GBK");
          18. //解決get方式亂碼問題:修改server.xml中的connector標簽-->URIEncoding="GBK"
          19. PrintWriter out = resp.getWriter();
          20. out.println(req.getParameter("p1"));
          21. out.println("</br>");
          22. out.println(req.getParameter("p2"));
          23. out.println("</br>");
          24. out.println(req.getParameter("p3"));
          25. out.println("</br>");
          26. }
          27. }

          補充:

          上面的這個例子.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網頁的頁面范圍后,點擊右側的確定即可。

          這時再次打卡導出的網頁可以看到表格被完整且保留原格式導出。


          主站蜘蛛池模板: 久久国产精品视频一区| 蜜臀AV一区二区| 高清无码一区二区在线观看吞精| 无码囯产精品一区二区免费| 日韩精品一区二区三区大桥未久| 无码人妻视频一区二区三区 | 日本在线一区二区| 精品无码国产一区二区三区AV| 国产成人一区二区三中文| 性盈盈影院免费视频观看在线一区| 精品国产一区二区三区久久影院| 日韩三级一区二区| 中文字幕精品无码一区二区三区| 日韩免费视频一区二区| 欧美一区内射最近更新| 精品视频在线观看你懂的一区| 日本午夜精品一区二区三区电影| 丝袜美腿一区二区三区| 国精品无码A区一区二区| 亚拍精品一区二区三区| 亚洲AV无码一区二三区| 免费播放一区二区三区| 福利一区福利二区| 精品黑人一区二区三区| 亚洲一区视频在线播放| 无码人妻精品一区二区蜜桃网站| 国产精品亚洲一区二区三区| 国产一区二区精品久久| 国产一区二区在线观看麻豆| 国产一区二区三区精品久久呦| 国产精品无码AV一区二区三区| 日韩在线一区视频| 一区二区三区免费视频网站| 3d动漫精品啪啪一区二区中| 日本精品夜色视频一区二区| 国产精品高清一区二区人妖| 国产一区二区不卡在线播放| 国产成人一区二区三区免费视频| 中文字幕一区一区三区| 国产午夜精品一区二区三区漫画| 精品中文字幕一区在线|