电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

解決python中文亂碼問題方法總結

瀏覽:3日期:2022-06-20 15:13:58

在運行這樣類似的代碼:

#!/usr/bin/env pythons='中文'print s

最近經常遇到這樣的問題:

問題一:

SyntaxError: Non-ASCII character ’xe4’ in file E:codingpythonUntitled 6.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

問題二:

UnicodeDecodeError: ’ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128)

問題三:

UnicodeEncodeError: ’gb2312’ codec can’t encode character u’u2014’ in position 72366: illegal multibyte sequence

這些都是跟字符編碼有關的問題,很郁悶,中文總是弄不出來,找了很多方案,這里有些是我前幾天找到的一些方案,拿出來給大家分享一下哈

字符串在Python內部的表示是unicode 編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

decode的作用是將其他編碼的字符串轉換成unicode編碼,如str1.decode(’gb2312’),表示將gb2312編碼的字符串str1轉換成unicode編碼。

encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2.encode(’gb2312’),表示將unicode編碼的字符串str2轉換成gb2312編碼。

在某些IDE中,字符串的輸出總是出現亂碼,甚至錯誤,其實是由于IDE的結果輸出控制臺自身不能顯示字符串的編碼,而不是程序本身的問題。

如在UliPad中運行如下代碼:

s=u'中文'print s

會提示:

UnicodeEncodeError: ’ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128)

這是因為UliPad在英文WindowsXP 上的控制臺信息輸出窗口是按照ascii編碼輸出的(英文系統的默認編碼是ascii),而上面代碼中的字符串是Unicode編碼的,所以輸出時產生了錯誤。

將最后一句改為:print s.encode(’gb2312’)

則能正確輸出“中文”兩個字。

若最后一句改為:print s.encode(’utf8’)

則輸出:xe4xb8xadxe6x96x87,這是控制臺信息輸出窗口按照ascii編碼輸出utf8編碼的字符串的結果。

下面代碼可能比較通用一些,如下:

#!/usr/bin/env python #coding=utf-8 s='中文'if isinstance(s,unicode): #s=u'中文' print s.encode(’gb2312’) else: #s='中文' print s.decode(’utf-8’).encode(’gb2312’)#!/usr/bin/env python#coding=utf-8s='中文'if isinstance(s,unicode): #s=u'中文' print s.encode(’gb2312’)else: #s='中文' print s.decode(’utf-8’).encode(’gb2312’)

看看下面一段代碼:

#!/usr/bin/env python #coding=utf-8 #python version:2.7.4 #system:windows xp import httplib2def getPageContent(url): ’’’’’ 使用httplib2用編程的方式根據url獲取網頁內容 將bytes形式的內容轉換成utf-8的字符串 ’’’ #使用ie9的user-agent,如果不設置user-agent將會得到403禁止訪問 headers={’user-agent’:’Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)’, ’cache-control’:’no-cache’} if url: response,content= httplib2.Http().request(url,headers=headers) if response.status== 200 : return content

import sys reload(sys) sys.setdefaultencoding(’utf-8’) #修改默認編碼方式,默認為ascci print sys.getdefaultencoding() content= getPageContent('http://www.oschina.net/')print content.decode(’utf-8’).encode(’gb2312’)#!/usr/bin/env python#coding=utf-8#python version:2.7.4#system:windows xpimport httplib2def getPageContent(url): ’’’ 使用httplib2用編程的方式根據url獲取網頁內容 將bytes形式的內容轉換成utf-8的字符串 ’’’ #使用ie9的user-agent,如果不設置user-agent將會得到403禁止訪問 headers={’user-agent’:’Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)’, ’cache-control’:’no-cache’} if url: response,content= httplib2.Http().request(url,headers=headers) if response.status== 200 : return content

import sysreload(sys)sys.setdefaultencoding(’utf-8’) #修改默認編碼方式,默認為ascciprint sys.getdefaultencoding()content= getPageContent('//www.jb51.net/')print content.decode(’utf-8’).encode(’gb2312’)

上面的代碼的意思:向www.jb51.net網站請求他的主頁,(如果直接是utf-8編碼,不能輸出中文)想將編碼方式為utf-8轉向gd2312,出現問題三

當我把它將print content.decode(’utf-8’).encode(’gb2312’)改成print content.decode(’utf-8’).encode(’gb2312’, ‘ignore’)時,OK了,可以顯示中文了,但不敢確定是否為全部,貌似只有部分吧,有些不能用gb2312編碼

然而,當我把網站換成 www.soso.com時,不用轉為gb2312,用utf-8即可正常顯示中文

總結一下:

向文件直接輸出ss會拋出同樣的異常。在處理unicode中文字符串的時候,必須首先對它調用encode函數,轉換成其它編碼輸出。這一點對各個環境都一樣。在Python中,“str”對象就是一個字節數組,至于里面的內容是不是一個合法的字符串,以及這個字符串采用什么編碼(gbk, utf-8, unicode)都不重要。這些內容需要用戶自己記錄和判斷。這些的限制也同樣適用于“unicode”對象。要記住“unicode”對象中的內容可絕對不一定就是合法的unicode字符串,我們很快就會看到這種情況。在windows的控制臺上,支持gbk編碼的str對象和unicode編碼的unicode對象。

更多關于解決python中文亂碼問題方法總結的文章請查看下面的相關鏈接

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 范秘书_懂你的范文小秘书| 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | 复盛空压机配件-空气压缩机-复盛空压机(华北)总代理 | UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | atcc网站,sigma试剂价格,肿瘤细胞现货,人结肠癌细胞株购买-南京科佰生物 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 圈酒招商网【jiushuitv.com】_酒水招商_代理_加盟平台 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 火锅底料批发-串串香技术培训[川禾川调官网]| 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 低温柔性试验仪-土工布淤堵-沥青车辙试验仪-莱博特(天津)试验机有限公司 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 电磁流量计厂家_涡街流量计厂家_热式气体流量计-青天伟业仪器仪表有限公司 | 真空乳化机-灌装封尾机-首页-温州精灌| 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 不锈钢丸厂家,铝丸,铸钢丸-淄博智源铸造材料有限公司 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 |