pythonxml中文亂碼
㈠ python讀取中文目錄出現亂碼
先對路徑進行unicode處理,然後再打開。舉例:
inpath = 'E:\MyProject\SVN_Project\Drawingboard_local\model\mydata\input\proction\示波器\0.htm'
uipath = unicode(inpath, "utf8")
然後用"uipath"經過編碼後的路徑去open()即可:
fin = open(uipath)
㈡ python3 中文輸出亂碼問題
python 3和2很大區別就是python本身改為默認用unicode編碼。
字元串不再區分"abc"和u"abc", 字元串"abc"默認就是unicode,不再代表本地編碼、
由於有這種內部編碼,像c#和java類似,再沒有必要在語言環境內做類似設置編碼,比如「sys.setdefaultencoding」;
也因此也python 3的代碼和包管理上打破了和2.x的兼容。2.x的擴展包要適應這種情況改寫。
另一個問題是語言環境內只有unicode怎麼輸出gbk之類的本地編碼。
答按慣例都在(序列化)輸出時才轉換成本地編碼。
比如
file.write("GBK的中文".encode("GBK"))
python環境內字元串用str.encode("GBK")方法輸出成位元組串用於和其他環境交流。
㈢ python中文返回的亂碼問題
#-*- coding: utf-8 -*-
import win32api
import win32con
import time
from win32gui import *
def getWindow():
titles = set()
def foo(hwnd,nouse):
if IsWindow(hwnd) and IsWindowEnabled(hwnd) and IsWindowVisible(hwnd):
#對增加的內容指定編碼格式,運行調試通過,沒有亂碼
titles.add(GetWindowText(hwnd).decode('utf-8'))
EnumWindows(foo, 0)
print(titles)
if __name__=='__main__':
time.sleep(3)
getWindow()
㈣ python中文顯示亂碼,已經在開頭有了coding: utf-8
亂碼原因:
因為你的文件聲明為 utf-8,並且也應該是用 utf-8 的編碼保存的源文件。但是 windows 的本地默認編碼是 cp936,也就是 gbk 編碼,所以在控制台直接列印 utf-8 的字元串當然是亂碼了。
解決方法:
py文件用記事本打開,另存為utf-8格式即可
㈤ 如何判斷中文亂碼 python
如果頁面是GB18030編碼,而資料庫是GBK編碼,一般來說是不用轉換的。GB18030是GBK的超級。GB18030本身兼容GBK,而GB18030中的部分字元GBK中是沒有的。將GB18030字元寫入GBK的資料庫,只會丟失部分字元而已。一般網頁上不會出現罕見的字元,所以這種情況是無需處理的。
所以,請仔細核對頁面和資料庫的編碼。
即使你提供的頁面、資料庫編碼是正確的,而且一定要轉換,也應該這樣做:
s = 'GB18030字元串'
s = s.decode('GB18030') # 轉化為unicode
s = s.encode('GBK') # 轉化為GBK
㈥ python編程中中文輸出亂碼UnicodeEncodeError: 'ascii' codec can't encode character
樓主你好!肆余
其實按照你的代碼的邏輯來做是沒有錯的,無法顯示成utf-8編碼的文本其實是因為在request請求的時候,按照網頁的標識轉了碼,接著BeautifulSoup把已經是utf-8的文本又強轉了一次utf-8編碼,導致了無法正確的顯示,以想要拿到的塵銀時間為例,其實程序的目標字元串應該如下:
#-*-coding:utf-8-*-
'''我們想要使用的字元串'''
target_str=':53'
'''兩次轉碼後的字元串'''
get_str=u':53'
歸根結底是兩個對象的類不同,但python不支持這兩種類型的強轉,個人想了個比較臨時的解決方案,算是個python打了個補丁,就是將字元串轉成二進制,再轉回字元串,這樣就unicode就不用給他加上編碼方式再轉成二進制字元串了,修改後的代碼如下:
#-*-coding:utf-8-*-
importrequests
frombs4importBeautifulSoup
fromdatetimeimportdatetime
defencode(s):
'''將字元串轉成二進制'''
return''.join([bin(ord(c)).replace('0b','')forcins])
defdecode(s):
'''將二進制轉換成字元串'''
return''.join([chr(i)foriin[int(b,2)forbins.split('')]])
res=requests.get('
)
res.encodeing='utf-8'
soup=BeautifulSoup(res.text,'html.parser')
'''每個中文字元都進行轉換處理'''
title=decode(encode(soup.select('#artibodyTitle')[0].text))
time=decode(encode(soup.select('.time-source')[0].contents[0].strip()))
chinese='%Y年%m月%d日%H:%M'
timesource=datetime.strptime(time,chinese)
print(title)
print(timesource)
看樓主在研究的過程中,對字元串的編碼原理的理解還有所欠派雹宴缺,這方面的資料在網上很多,可以再自行研究一下,能夠獲得長足的進步。
望採納,謝謝!
㈦ python print中文亂碼問題 win10 Python2
python2字元串編碼的問題,如果要輸出中文可以使用u前綴,這樣就可以直接使用了
a=u'你好'
printa
這樣就可以了
㈧ python命令行輸入中文亂碼怎麼辦
python2.X,代碼中指定了UTF-8,但是在cmd命令行窗口時,列印的中文仍然會亂碼。
在python3不存在該問題
運行結果:
原因
中文windows默認的輸出編碼為gbk ,與腳本中定義的UTF-8不一樣,所以出現了解碼失敗的情況。
相關推薦:《Python基礎教程》
解決方法
有如下兩種方法可以解決這個問題
方法一
我們可以通過先把中文解碼為unicode,然後再轉化為gbk來解決這個問題:
修改後運行結果:
方法二
當然,我們也可以通過改變cmd命令行窗口的輸出格式來解決這個問題:
·chcp 65001 就是換成UTF-8代碼頁
·chcp 936 可以換回默認的GBK
但是這樣就降低了腳本的兼容性,在其他環境運行的時候可能還會出現這樣的錯誤,而且可能會影響其他腳本運行,所以推薦使用第一種方法。
㈨ python輸出到文件亂碼如何解決
python代碼文件的編碼
py文件默認是ASCII編碼,中文在顯示時會做一個ASCII到系統默認編碼的轉換,這時就會出錯:SyntaxError: Non-ASCII character。需要在代碼文件的第一行或第二行添加編碼指示:
1 # coding=utf-8 ##以utf-8編碼儲存中文字元
2 print '中文'
像上面那樣直接輸入的字元串是按照代碼文件的編碼來處理的,如果用unicode編碼,有以下三種方式:
1 s1 = u'中文' #u表示用unicode編碼方式儲存信息
2 s2 = unicode('中文','gbk')
unicode是一個內置函數,第二個參數指示源字元串的編碼格式。
decode是任何字元串具有的方法,將字元串轉換成unicode格式,參數指示源字元串的編碼格式。
encode也是任何字元串具有的方法,將字元串轉換成參數指定的格式。
(2)、字元串的編碼
用 u'漢字' 構造出來的是unicode類型,不用的話構造出來是str類型
str的編碼是與系統環境相關的,一般就是sys.getfilesystemencoding()得到的值
所以從unicode轉str,要用encode方法
從str轉unicode,所以要用decode
例如:
# coding=utf-8 #默認編碼格式為utf-8
s = u'中文' #unicode編碼的文字
print s.encode('utf-8') #轉換成utf-8格式輸出
但當python中間處理非ASCII編碼時,經常會出現如下錯誤:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
0x??是超出128的數字,python在默認的情況下認為語言的編碼是ascii編碼,所以無法處理其他編碼,需要設置python的默認編碼為所需要的編碼。
一個解決的方案是在代碼中添加:
import sys
reload(sys)
sys.setdefaultencoding('utf-8') (其中utf-8為你想輸出的字元編碼)
解釋:
sys.setdefaultencoding方法在python導入site.py後就刪除了(具體代碼查看site.py就可以看到)因此如果想用的話可以再重新load進入
總結:
u=u'unicode編碼文字'
g=u.encode('gbk') #轉換為gbk格式
print g #此時為亂碼,因為當前環境為utf-8,gbk編碼文字為亂碼
str=g.decode('gbk').encode('utf-8') #以gbk編碼格式讀取g(因為他就是gbk編碼的,需要事先知道它是GBK編碼)並轉換為utf-8格式輸出
print str #正常顯示中文(同文件輸出)
安全的方法:
s.decode('gbk','ignore').encode('utf-8′) #以gbk編碼讀取(當然是讀取gbk編碼格式的文字了)並忽略錯誤的編碼,轉換成utf-8編碼輸出。
推薦學習《Python教程》!