網頁表單中的漢字存儲到數據庫, 再從數據庫中提取並顯示到網頁時碰到的亂碼問題。


  今天在寫python CGI腳本測試將網頁表單中填寫的信息提交后存儲到mysql中時, 碰到了漢字顯示亂碼的問題。 因為之前在學習mysql的時候用insert向數據庫中插入漢字時出現亂碼, 解決此問題是修改數據庫的字符編碼。。所以在此次測試之前, 就已經建表時設置了默認字符為utf-8.  可是, 在將表單中的漢字存儲到數據庫時, 數據庫中每條記錄的漢字依然是顯示亂碼。 因為感覺一定不是數據庫的問題了, 所有就各種查閱關於網頁提交表單內容時讀漢字時候進行編碼修改。 我將網頁的編碼設置為utf-8, 在查閱資料的過程中, 了解到, 網頁表單中的內容會按照所給編碼格式傳輸到服務器中的python腳本, 然而utf-8格式的漢字在python中是一十六進形式存儲的, 比如: 你好嗎, 如果在python交互模式下查看

                                                     

每個漢字用三個十六進制字節表示。。如果要將其正確的顯示出漢字, 就要使用print, 因為print在顯示漢字時, 會把內存中存儲的內容轉換為正確的顯示格式。

  所以在python腳本中將從表單中獲取的輸入的漢字存儲到數據庫時, 其實是將這十六進制數存入了數據庫。。。數據庫中依然顯示亂碼, 因為之前修改數據庫的編碼時, 曾把character_set_client、character_set_database、character_set_server等變量的內容由latin1改為了utf-8, 在無意的嘗試中, 又將這些變量的值改回了latin1, 結果漢字不再顯示為亂碼了。 無意中嘗試居然解決了問題。。 之后我又嘗試了幾次, 發現, 只要將數據庫中表的字符格式設置為可以顯示漢字的utf-8格式, 而對於數據庫中的其他字符變量不做修改, 數據的顯示能正常顯示。。

  而之后在將數據從數據庫中提取出來顯示在網頁的時候, 因為是直接將row = fetchone()中的數據print row, 打印出來的, 網頁中漢字顯示的是十六進值形式, 腦子有些轉不過來彎了, 以后又是編碼問題, 搞了老一會也沒有頭緒,

其實只要在腳本中將查詢的每一個字段內容用print打印出來就行了, print row[0], print row[1]...。   這點問題, 居然讓我搞了一下午, 唉。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM