python的中文问题

Python IDLE 中文乱码问题 玩过 Python 的人都知道,搞 Python 开发一般都是在 Python 自带的 IDLE 集成开发环境中写代码。然而,在开始学习的时候,想要处理中文字符,总是会遇到出现鬼符的情况··· 阅读详情

python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了。

先来看看python的版本:
>>> import sys
>>> sys.version
'2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)]'

(一)
用记事本创建一个文件ChineseTest.py,默认ANSI:
s = "中文"
print s

测试一下瞧瞧:
E:/Project/Python/Test>python ChineseTest.py
  File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xd6' in file ChineseTest.py on line 1, but no encoding declared; see http://www.pytho
n.org/peps/pep-0263.html for details

偷偷地把文件编码改成UTF-8:
E:/Project/Python/Test>python ChineseTest.py
  File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared; see http://www.pytho
n.org/peps/pep-0263.html for details

无济于事。。。
既然它提供了网址,那就看看吧。简单地浏览一下,终于知道如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明。把ChineseTest.py文件的编码重新改为ANSI,并加上编码声明:
# coding=gbk
s = "中文"
print s

再试一下:
E:/Project/Python/Test>python ChineseTest.py
中文

正常咯:)
(二)
看一看它的长度:
# coding=gbk
s = "中文"
print len(s)
结果:4。
s这里是str类型,所以计算的时候一个中文相当于两个英文字符,因此长度为4。
我们这样写:
# coding=gbk
s = "中文"
s1 = u"中文"
s2 = unicode(s, "gbk") #省略参数将用python默认的ASCII来解码
s3 = s.decode("gbk") #把str转换成unicode是decode,unicode函数作用与之相同
print len(s1)
print len(s2)
print len(s3)
结果:
2
2
2
(三)
接着来看看文件的处理:
建立一个文件test.txt,文件格式用ANSI,内容为:
abc中文
用python来读取
# coding=gbk
print open("Test.txt").read()
结果:abc中文
把文件格式改成UTF-8:
结果:abc涓枃
显然,这里需要解码:
# coding=gbk
import codecs
print open("Test.txt").read().decode("utf-8")
结果:abc中文
上面的test.txt我是用Editplus来编辑的,但当我用Windows自带的记事本编辑并存成UTF-8格式时,
运行时报错:
Traceback (most recent call last):
  File "ChineseTest.py", line 3, in <module>
    print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'/ufeff' in position 0: illegal multibyte sequence

原来,某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。
因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量:
# coding=gbk
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
 data = data[3:]
print data.decode("utf-8")
结果:abc中文

(四)一点遗留问题
在第二部分中,我们用unicode函数和decode方法把str转换成unicode。为什么这两个函数的参数用"gbk"呢?
第一反应是我们的编码声明里用了gbk(# coding=gbk),但真是这样?
修改一下源文件:
# coding=utf-8
s = "中文"
print unicode(s, "utf-8")
运行,报错:
Traceback (most recent call last):
  File "ChineseTest.py", line 3, in <module>
    s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
显然,如果前面正常是因为两边都使用了gbk,那么这里我保持了两边utf-8一致,也应该正常,不至于报错。
更进一步的例子,如果我们这里转换仍然用gbk:
# coding=utf-8
s = "中文"
print unicode(s, "gbk")
结果:中文
翻阅了一篇英文资料,它大致讲解了python中的print原理:
When Python executes a print statement, it simply passes the output to the operating system (using fwrite() or something like it), and some other program is responsible for actually displaying that output on the screen. For example, on Windows, it might be the Windows console subsystem that displays the result. Or if you're using Windows and running Python on a Unix box somewhere else, your Windows SSH client is actually responsible for displaying the data. If you are running Python in an xterm on Unix, then xterm and your X server handle the display.

To print data reliably, you must know the encoding that this display program expects.

简单地说,python中的print直接把字符串传递给操作系统,所以你需要把str解码成与操作系统一致的格式。Windows使用CP936(几乎与gbk相同),所以这里可以使用gbk。
最后测试:
# coding=utf-8
s = "中文"
print unicode(s, "cp936")
结果:中文

 
python中文乱码问题大总结 在运行这样类似的代码: 1 2 3 #!/usr/bin/env python s="中文" prints 最近经常遇到这样的问题: 问题一:SyntaxError: Non-ASCII character '\xe4' in file E:\coding\python\Untitled 6.py on line 3, but no encoding declared; see http://www.python.org/p. 阅读详情

相关推荐

工业场景实战:基于YOLO与多格式标注的传送带异物检测数据集构建指南

本文详细介绍了基于YOLO与多格式标注的传送带异物检测数据集构建方法,涵盖数据采集、标注技巧(YOLO、COCO、VOC格式)、数据增强策略及实战案例。通过工业级解决方案,有效提升异物检测准确率与效率,适用于各类工业场景。

weixin_29168393的博客 463

Python问题:SyntaxError: Non-ASCII character '\xe2'

Python问题:SyntaxError: Non-ASCII character ‘\xe2’ in file 在python中出现该问题是因为文件格式编码出现了问题,具体原因和解决方法如下: 原因分析“SyntaxError: Non-ASCII character ‘\xe2’ in file”翻译为中文的意思是:在文件中存在着非法的ASCII字符 2.ASCII是8位即为一个字符,一共有...

blue_lll的博客 2万+

基于CubeMX与lwip的STM32轻量级HTTP服务器搭建及VSCode高效开发指南

本文详细介绍了如何在STM32单片机上,利用STM32CubeMX图形化配置工具和轻量级TCP/IP协议栈lwIP,快速搭建一个轻量级HTTP服务器。通过结合VSCode的高效代码编辑能力,提供了一套从硬件连接到动态网页交互(SSI/CGI)的完整开发指南,旨在为嵌入式设备提供零成本、跨平台的Web交互界面。

weixin_29163857的博客 582

【Python】成功解决SyntaxError: Non-ASCII character

🔥【Python】告别乱码!轻松解决SyntaxError: Non-ASCII character🔥 还在为Python中的乱码问题头疼吗?🤯本文带你深入剖析SyntaxError: Non-ASCII character的成因与解决方案!🔍 从触发原因到编码声明,再到最佳实践,一文在手,乱码不再有!💪 掌握字符编码知识,让你的Python代码更稳定、更可靠!📘 读完本文,你将轻松解决编码问题,成为Python编码达人!🚀 #Python编码 #SyntaxError

创作高质量博文,分享知识,共同进步! 5935

RAG 赋能客服机器人:多轮对话与精准回复

在人工智能技术飞速发展的今天,客服机器人已成为企业提升服务效率的重要工具。然而,传统客服系统在多轮对话连贯性和精准回复能力上存在明显短板。检索增强生成(Retrieval-Augmented Generation, RAG)技术通过结合大语言模型(LLM)与外部知识库,为解决这一问题提供了创新路径。本文将深入探讨 RAG 在客服机器人中的应用,重点分析其如何实现多轮对话与精准回复,并结合实际案例与技术框架展开讨论。

shuizhudan223的博客 2142

从传统扫描到SSN:Tessent数据包技术如何减少90%测试时间

本文深入探讨了Tessent流式扫描网络(SSN)如何通过其核心的数据包技术,彻底改变芯片测试范式。该技术将测试数据封装成标准化数据包,在共享总线上进行智能路由与分发,实现了动态带宽分配与核心独立测试,从而将复杂SoC(如AI芯片)的总体测试时间大幅削减90%,并显著提升测试灵活性与可扩展性。

meat5的博客 490

python syntaxerror non-ascii_Python错误: SyntaxError: Non-ASCII character解决办法

Python错误: SyntaxError: Non-ASCII character解决办法(1)问题描述在写Python代码的过程中,有用到需要输出中文的地方,但是运行后发现上述错误。SyntaxError: Non-ASCII character '\xe4' in file ./common.py on line 2, but no encoding declared; see http:/...

weixin_39954464的博客 2180

grafana对接zabbix数据展示

【配置】点击【模板】点击【创建模板】添加三个监控项:【名称】搜索【】创建的模板;点击上方【监控项】,点击创建【监控项】点击上方【触发器】点击【创建触发器】主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】查看:左侧点击【监测】点击【主机】点击【Zabbix server】点击最新数据,找到添加的三个模板主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】把监控模板用起来① 明确获取指标数据的方法。

2401_83883919的博客 6592

解决 Python SyntaxError: Non-ASCII character 错误

解决 Python SyntaxError: Non-ASCII character 错误 报错:SyntaxError: Non-ASCII character ‘\xe4’ in file receiver.py on line 8, but no encoding declared; 解决:在文件头加# coding=utf-8 再次编译运行即可,注意空格

wuxiemimei的博客 6855

通信原理期末考试试题及答案

五、(总分12分)设某信道具有均匀的的双边噪声功率谱密度在该信道中传输抑制载波的单边带(上边带)信号,并设调制信号m(t)的频带限制在5K HZ,而载波为100 K HZ,已调信号的功率为10KW。:(1)单边带信号的载频为100kHz,带宽B=5kHz,为使信号顺利通过,理想带通滤波器的中心频率为。8、对最高频率为fH的调制信号m(t)分别进行AM、DSB、SSB调制,相应已调信号的带宽分别为。7、设调制信号为f(t)载波为,则抑制载波双边带调幅信号的时域表达式为,频域表达式为。

qq_67692062的博客 2392

【毕设实战】基于YOLOv8的HRSC2016船舶智能检测系统开发全指南(含可视化UI界面,打造海事领域高分毕设)

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

know_F0727的博客 127

Python 文件错误 SyntaxError: Non-Ascii Character \xe2

ASCII 是计算机和互联网上最流行的文本数据字符编码格式(美国信息交换标准代码)。ASCII 编码数据中有 128 个额外的字母、数字、特殊和控制字符的不同值。Python 中不允许使用非 ASCII,因为解释器会将其视为。Python 不能也不应该尝试确定一个字节序列表示 ASCII 范围之外的字符串。要解决此错误,我们必须在程序顶部添加编码:utf-8。

迹忆客 2083

PID、模糊PID、SkyHook、LQR、H2/H∞、ADRC等悬架控制合集

PID、模糊PID、SkyHook、LQR、H2/H∞等悬架控制合集

Mr.邹的博客 2013

python json.loads()中文问题-python中文编码&json中文输出问题

python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 unicode 问题。首先简要介绍字符串编码的历史,其次,讲解 python 对于字符串的处理,及编码的检测与转换,最后,介绍 python 爬虫采取的 json 数据存入文件时中文输出的问题。参考书籍:...

weixin_37988176的博客 4754

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Python matplotlib不显示中文的问题

在很长一段时间里用Python绘图,matplotlib都不能很好的显示中文,起初是认为我的pycharm里的设置问题,但是发现同样的问题在spyder里也同样的出现了,虽然有的地方可以用英文实在不行用拼音。。。但是在作图这里没有中文真的是太不方便了,机缘巧合下在年前终于找到问题的根源了,于是乎爱刨根问底儿的我把整个过程的解决方法分享给大家~~ 一共有两种解决方案,我强烈推荐第一种,因为更为方便,绘图时不用再写别的参数,调用一次即可,第二种方法也会写出来但是更多的是作为了解,主要因为相比之下太麻烦 方法一:

假装你是大灰狼的专栏 5708

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python中文注释问题

在RHEL6下使用Vim写python脚本发现不能使用中文注释,后来发现是编码问题 [wu@server python]$ cat ex4.py #!/usr/bin/python #中文注释 #cars_num cars = 100 #space_car_num space_in_a_car = 40 drivers = 30 passengers = 90 cars_not_driv

枯木的Linux专栏 3583

Python Yaml 写入中文乱码的问题

问题背景:   在执行测试用例,将测结果回写到yaml文件时,出现中文全都是Unicode编码的问题。 如下: test.yaml文件内容 Data: name: "中国" cityName: "上海" areaName: "闵行区" 读写代码如下 # FileName : writeYaml.py # Author : Adil # DateTime : 2020/4/26 6:37 PM # SoftWare : PyCharm import yaml yamlFi

n_fly的博客 4270

python3中文乱码问题

python3对python2的改变主要在编码,python3的编码是unicode unicode是utf-16(而不是utf-8) 因此 fout = codecs.open(‘output.html’,‘w’,encoding=‘utf-16’) fout.write("") fout.write("") fout.write("") fout.write(“哈哈哈哈”) … 这样可以解决中...

qq_23327279的博客 1385

python打不出中文_Python输入中文的问题

我写了一个爬乌云漏洞库的爬虫,其URL形式为http://www.wooyun.org/corps/公司名称/page/1,程序最后raw_input处输入公司名称即可跑出该公司的漏洞。现在的问题是中文编码的问题没解决好,如果公司的名称是英文如RiSing就可以,如果是中文就报错。求各位大大指点# coding=utf-8import sysreload(sys)sys.setdefaultenc...

weixin_39571749的博客 1138

关于Python中文报错的问题

在编写第一个HelloPython程序时,遇到了这样一个问题 print("helloWorld") print("你好") 在运行时,出现了这样的错误 查找资料时发现,Python2不支持中文。但是我明明安装的是Python3,于是我查看了我电脑里的Python列表 我的电脑里同时存在2.7和3.5,而当我使用Python命令时,默认使用的Python2.7。 接下来就要把默认改为3...

qq_16563277的博客 954

Python中文编码问题

python中文乱码

old-windbell 464

python idle 中文_Python IDLE 中文乱码问题

最近忙完了一个比较大的 GIS 软件系统,于是闲暇之余想研究一下开源的技术,纵观当前开源桌面 GIS 软件领域,最牛叉的莫过于大名鼎鼎的 Quantum GIS,简称 QGIS。做过 GIS 的人都知道,ESRI ArcGIS是GIS软件领域迄今为止世界上最牛叉的一个,但由于是商业软件,故而其价格普通大众望而却步。于是,寻找一款开源免费的且功能又能与之睥睨的GIS软件就在所难免了。本人经过大...

weixin_39901203的博客 1198

Python中文问题研究

我曾经在深入浅出java中文问题系列中研究过java的中文问题,现在中文问题已经不再羁绊我在java世界中漫游的脚步了。最近,对Python产生了浓厚的兴趣,谁知道跟中文问题这个老朋友又一次不期而遇。看来,在代码世界中,中文问题会在很长一段时间里跟我们形影不离。这也难怪,谁让当初发明计算机的不是我们中国人呢,否则,现在全世界的计算机都支持而且必须支持GBK,这样,写这样文章的人就不会是我了,而是大

Never too late to study 741

python中文编码-python中文编码&json中文输出问题

python2.x版本的字符编码有时让人很头疼,遇到问题,网上方法可以解决错误,但对原理还是一知半解,本文主要介绍 python 中字符串处理的原理,附带解决 json 文件输出时,显示中文而非 unicode 问题。首先简要介绍字符串编码的历史,其次,讲解 python 对于字符串的处理,及编码的检测与转换,最后,介绍 python 爬虫采取的 json 数据存入文件时中文输出的问题。参考书籍:...

weixin_37988176的博客 98

python中文乱码的问题

在运行这样类似的代码: #!/usr/bin/env python s="中文" print s 最近经常遇到这样的问题: 问题一:SyntaxError: Non-ASCII character '\xe4' in file E:\coding\python\Untitled 6.py on line 3, but no encoding declared; see h

iboxty的专栏 1034
上一篇: 继承和聚合
下一篇: 鲁豫有约80后创业新贵(下)
suacker
博客等级 码龄24年 46粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值