1. 程式人生 > >網站開發進階(三十三)中文字元編碼問題

網站開發進階(三十三)中文字元編碼問題

中文字元編碼問題

前言

      遇到的問題千奇百怪,在往mysql資料表儲存帶有中文字元的字串時顯示亂碼。經過程式碼輸出測試發現插入語句如下:

 

      在資料庫內查詢,發現儲存的內容為亂碼。

 

      嘗試在mysql中直接插入語句。如下:

      INSERT INTO lm_user_med (uid,medid,medname,medprice,num)VALUES ('u18353102088','TZ110204801','感冒靈顆粒1','8.00','1');

      由上面的資料表可以看出,儲存正常。而且在頁面顯示正常。

 

      為此,可以判定是資料表的字元編碼出現了問題。

      找了半天,原來問題出在這,可坑苦我了,連線資料庫時未指定編碼方式!!

      jdbc:mysql://localhost:3308/lmapp?useUnicode=true&characterEncoding=utf8

      在進行資料庫連線時一定要指定編碼方式!(多麼痛的領悟~)

吐槽

      團隊開發時,有一套完善的編碼規範至關重要!

      不怕BOSS的BUG,就怕沒有良好編碼風格的隊友!

繼續

      在客戶端一切正常,但是放到伺服器上,還是出現了問題。

 

     從輸出資訊可以判斷在伺服器端,獲取中文字元時就已經出現了問題,而與資料庫並無關係。回到程式中,相應字元編碼如下:

 

      改用預設編碼String medname=new

 String(medname1.getBytes(),"UTF-8");後,服務端輸出如下:

 

      部分中文字元得到了解析。也是醉了!明天再解決吧!

      改變一下思路,首先檢視傳入引數的編碼格式。有關編碼格式的工具類,詳見博文《java 判斷字串編碼型別》。

      在本地:

 

      服務端:

 

      可見兩者將在利用http post請求方式傳參時所使用的編碼方式不同,但是這是一個專案,編碼方式相同毋庸置疑。

      request.setCharacterEncoding("UTF-8");

困惑~

      既然服務端傳參時本身就是UTF-8,但是其內容還是亂碼!

      轉換編碼方式:

      String medname=new String(medname1.getBytes("GBK"),"UTF-8");

 

      可發現,只有4箇中文字元得到了正確轉義。存在中文字元編碼轉換過程中字元丟失現象。有關字元編碼格式,詳見博文《String.getBytes()方法中的中文編碼問題》。

再次更換編碼方式,將頁面顯示編碼改為“GBK,這樣中文字元就可以正常顯示了。直接在請求引數中即可獲取到正確的引數(編碼方式為GBK),而無需再次轉碼。但是在本地測試時仍然出現亂碼現象,因為其編碼方式為ISO-8859-1

 

 

      同樣,在藥品說明書展示時同樣需要指定編碼方式為“GBK”。這樣自己就有一個大大的疑惑了:“為何本地與伺服器上的編碼方式會不同?”詳見博文《編碼中的setCharacterEncoding 理解》。Tomcat5.0中,預設情況下使用ISO- 8859-1URL提交的資料和表單中GET方式提交的資料進行重新編碼(解碼),而不使用該引數對URL提交的資料和表單中GET方式提交的資料進行重新編碼(解碼)。這樣本地輸出的編碼方式為ISO8859-1就不足為奇了。

美文美圖

 


相關推薦

網站開發(十三)中文字元編碼問題

中文字元編碼問題前言      遇到的問題千奇百怪,在往mysql資料表儲存帶有中文字元的字串時顯示亂碼。經過程式碼輸出測試發現插入語句如下:       在資料庫內查詢,發現儲存的內容為亂碼。       嘗試在mysql中直接插入語句。如下:      INSERT IN

網站開發(十一)如何將一個jsp頁面巢狀在另一個頁面中

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java開發筆記(十三字元包裝型別

正如整型int有對應的包裝整型Integer那樣,字元型char也有對應的包裝字元型Character。初始化字元包裝變數也有三種方式,分別是:直接用等號賦值、呼叫包裝型別的valueOf方法、使用關鍵字new建立新變數。倘若要把字元包裝變數轉換成字元變數,則呼叫包裝變數的charValue方法即可。甚至可以

網站開發 十 如何將一個html頁面巢狀在另一個頁面中

如何將一個html頁面巢狀在另一個頁面中 1.IFrame引入  <IFRAME NAME="content_frame" width=100% height=30 marginwidth=0 marginheight=0&nbs

網站開發 十一 如何將一個jsp頁面巢狀在另一個頁面中

如何將一個jsp頁面巢狀在另一個頁面中 這個在做網頁中常要用到,有些通用的內容可集中放在一個頁面檔案中,其它要用到這些內容的頁面只需要包含(引用)這個通用檔案即可。這樣便於維護,如果有很多網頁,當通用內容需要修改時,只改一個檔案就可以了,不需要每個檔案單獨修改。 最典型的應用比如頁尾的版權資訊等

網站開發 十六 錯誤提示 Multiple annotations found at this line - bas

錯誤提示:Multiple annotations found at this line: basePath cannot be resolved to a variable  &

網站開發(十六)錯誤提示:Multiple annotations found at this line:- basePath cannot be resolved to a variable

                錯誤提示:Multiple annotations found at this line: basePath cannot be resolved to a variable出現以上錯誤,主要是由下面這句引起的:<base href="<%= basePath %&

跨平臺移動APP開發 hbuilder+mui mobile app 開發心酸路

注:請點選此處進行充電! 1.問題描述:在實現圖片輪轉時,若將 <script type="text/javascript"> mui("#slider").slider({ interval: 5000 }); </script>

網站開發(二十五)js如何將html表格匯出為excel檔案

js如何將html表格匯出為excel檔案        贈人玫瑰,手留餘香。若您感覺此篇博文對您有用,請花費2秒時間點個贊,您的鼓勵是我不斷前進的動力,共勉!       jsp頁面資料匯出成excel的方法很多,今天介紹一種簡單的js方法:   原始碼 // 匯出 $

網站開發(十)如何將一個html頁面巢狀在另一個頁面中

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興! 如何將一個html頁面巢狀在另一個頁面中 1.IFrame引入  <IFRAME NAME="content_frame" width=100% height=30 marginwi

網站開發(二)阿里雲將80埠請求轉發到其他埠

阿里雲將80埠請求轉發到其他埠 背景 租了一臺阿里雲ECS,想搭建一個java Web 程式,環境都搭建好後,將Tomcat埠改為80並執行。 ./startup.sh 程式報錯埠號衝突。 估計是80埠被佔用了,但是想繫結域名,還是需要將80埠對映到tomcat才行。 於是

網站開發(四)Tomcat Server處理一個http請求的過程

Tomcat Server處理一個http請求的過程   假設來自客戶的請求為: http://localhost:8080/wsota/wsota_index.jsp 1) 請求被髮送到本機埠8080,被在那裡偵聽的Coyote HTTP/1.1 Connector獲得

網站開發 十二 JS實現打印功能 包括打印預覽 打印設置等

content color 利用 lis cor 解決 推薦 ati center JS實現打印功能(包括打印預覽、打印設置等) 緒 最近在進行項目開發時,需要實現後臺管理端打印功能,遂在網上一陣搜索,搜到了很多相關的文章。其中絕大部分文章都是使用的Lodop5.0

網站開發 二 阿裏雲將80端口請求轉發到其他端口

環境 pid aqi ava 外網 mil 被占用 article font 阿裏雲將80端口請求轉發到其他端口 背景 租了一臺阿裏雲ECS,想搭建一個java Web 程序,環境都搭建好後,將Tomcat端口改為80並執行。 ./startup.sh 程序報錯

AngularJS(十一)AngularJS項目開發技巧之獲取模態對話框中的組件ID

ng- 美圖 控件 div one 思考 span ava layui AngularJS項目開發技巧之獲取模態對話框中的組件ID 需求 出於項目開發需求,須要實現的業務邏輯是:藥店端點擊查看“已發貨”“已收貨”訂單詳情時。模塊彈出框中僅僅應出現“取消”bu

Python(五十三)-Flask Web開發實現將表單渲染成HTML

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興! Python進階(五十三)-Flask Web來發實現將表單渲染成HTML   在利用Flask進行Python Web開發時,頁面中的wt

Android開發之NIO非阻塞包()

有關Android NIO的精髓主要用於高負載的Socket網路傳輸,相對於傳統I/O模型的Socket傳輸方式的優勢,我們已經在 Android開發進階之NIO非阻塞包(一) 中講到了,這裡不再贅述,一起來看看Android NIO有關Socket操作提供的類吧: 一、S

移動端web開發

page 提升 最終 好玩的 ini 進階 body user hang posted @ 2014-11-24 20:09 vajoy 閱讀(4708) 評論(12) 編輯 收藏 三個月前曾寫過一篇跨終端響應式頁面設計入門的博客,上了博客園頭條也得到了不少關註

蘋果新的編程語言 Swift 語言十三)--類型檢查與類型嵌套

兩個類 nes left p s 查詢 text edi host letter 一 類型檢查 1、 類型檢查操作符 類型檢查用來檢查或轉換一個實例的類型到另外的類型的一種方式。 在Swift中,類型檢查使用is和as操作符來實現。

Java開發之路

為我 變量 kafka 自然 ges 想想 javaweb 目前 沒有 背景一 我接觸Java開發已經一年多了了。 從剛開始生澀地接觸語法,惹得編譯器報各種語法錯誤;到接觸OOD的思想,封裝、繼承、多態,懵懵懂懂地聽說著它們;再到學習Web開發,想著這些也許並不重要,實際用