程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python apache CGI編程:如何解決網頁亂碼、調用cookie亂碼問題?AH01215: UnicodeEncodeError: ‘gbk‘ codec can‘t encode char

編輯:Python

1,直接在html代碼中添加“charset="text/html;utf-8”。

這個方法,會直接讓浏覽器使用gbk編碼模式。這雖然可以解決網頁亂碼的問題,但不能根本解決編碼問題。如果你後面確定不使用含有中文的一些函數操作,那麼你可以使用這個方法,否則不推薦使用。

這裡舉例說明一下,如下所示:

標號1位置的代碼,表面浏覽器會采用gbk的編碼模式,事實也確實如此。運行後如圖所示:

標記2、3位置的代碼,就是用獲取之前網頁設置的cookie。這時候浏覽器運行這段腳本的時候就出錯了。打開apache24中的log文件,在erro中我們可以看到錯誤日志,如下圖所示:

通過這四個紅色框,我們就發現了腳本運行出錯的根本原因,最後一個紅色框裡已經說明了:

AH01215: UnicodeEncodeError: 'gbk' codec can't encode character '\\x8f'

這個錯誤,說直白一點,就是編碼出問題了,網頁代碼用的是gbk編碼,而python腳本用的是utf-8編碼,所以在使用print打印時,apache報錯了或者直接亂碼顯示。

那麼為了避免這些問題,我推薦大家使用第二個解決網頁編碼、亂碼的方法。

2,python文件中,指明控制台的編碼的方式,即添加:

import sys

sys.stdout=codecs.getwriter('utf-8')(sys.stdout.buffer);

這兩句代碼,類似於java中的輸出流套接方法,getwriter(“utf-8”)返回一個streamwritter(‘parameter’)函數,而sys.stdout.buffer就作為參數,供streamwritter(‘parameter’)使用。這樣就指明了sys.stdout標准輸出流的編碼方式為utf。

如此一來,整個網頁的編碼方式就是’utf’了。如上圖所示,添加標記1的代碼後,整個網頁的編碼都是utf-8了,如下圖運行所示:

解決了整個網頁編碼的問題,最後我們還要解決python函數調用cookie時出現的亂碼問題。如圖標記4所示,我們需要對從cookie中獲取的字段值進行編碼,最終輸出utf-8編碼的內容,即采用這段代碼:

‘your getting str’.encode(‘latin-1’).decode(‘utf-8’)

這裡需要注意一個點:cookie采用latin-1的編碼模式,所以我們要用encode將cookie的字段內容按latin-1來解碼,最後再utf-8編碼成字符串。最終,這個腳本運行結果就正確了!如上面最後一張圖所示,這個python文件正確讀出了cookie的字段值。

我是科學財子,一個正在學習python的新人程序員,立志從事測試、游戲開發、大數據、AI方向!關注我,不定時為你分享python編程干貨!每天進步一小點,每天成長一大步!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved