python报错:ordinal not in range(128)解决方案

本文详细解析了Python中出现UnicodeEncodeError: ordinal not in range(128)的错误原因,该错误通常由特殊Unicode字符引起,如u200e。文中提供了两种解决方案,一种是设置默认编码为utf-8,另一种是在使用print函数时避免编码冲突的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们的服务器会跳出下面的错误:
UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\u200e’ in position 13: ordinal not in range(128)

报错:ordinal not in range(128)
原因:这是python中汉字编码出问题导致的报错,主要是字符\u200e 引起的问题

\u200e 是控制字符表示从左至右书写标记, 不是空格, 完全看不见, 没有宽度的一个字符,我们平常在网页中是看不到的。
和其类似的还有Unicode格式控制字符,比如“从右至左书写标记”(\u200F)和“从左至右书写标记”(\u200E),零宽连接符(\u200D)和零宽非连接符(\uFEFF)控制着文本的视觉显示,这对于一些非英语文本的正确显示来说是至关重要的。

解决方法:是在python代码所在的文件头加上如下语句块

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

如果加入以上代码块引入python中print函数失灵的问题,那么就将如上代码块替换为如下代码块

import sys #这里只是一个对sys的引用,只能reload才能进行重新加载
stdi,stdo,stde=sys.stdin,sys.stdout,sys.stderr 
reload(sys) #通过import引用进来时,setdefaultencoding函数在被系统调用后被删除了,所以必须reload一次
sys.stdin,sys.stdout,sys.stderr=stdi,stdo,stde 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值