成功解决:UnicodeDecodeError:‘ascii‘ codec can‘t decode byte 0xc3 :ordinal not in range (128)

这篇博客探讨了在网上常见的Python编码问题解决方案,如设置默认编码为'utf-8',并提供了一个亲测有效的替代方案,涉及`io`,`sys`和`urllib.request`模块的使用。此方法可能不适用于所有情况,但对作者遇到的多次问题都有效。
部署运行你感兴趣的模型镜像

遇到这个问题,搜索网上好多的答案都是

# 在文件头部写入以下内容

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

或者什么:

都是这种没有作用的答案,下面我亲测有效的答案,不过不一定适合所有这种情况,反正我遇到几次这个问题都是这样解决的

import io
import sys
from urllib.request import urlopen
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')

 

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在安装 `wheel` 时遇到 `UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 40` 错误,通常是由于 Python 默认编码与系统环境或文件路径中的字符编码不一致所导致。Python 在处理非 ASCII 字符时,会尝试使用默认的 ASCII 编码进行解码,而当实际内容包含 UTF-8 或其他多字节编码字符时就会报错。 ### 常见原因 - 系统默认编码为 ASCII。 - 文件路径或用户名中包含非 ASCII 字符(如中文、特殊符号)。 - 使用的是 Python 2.x 版本,其默认字符串类型为 `str`(即字节串),且默认编码为 ASCII。 - 安装过程中某些临时路径或缓存路径含有非 ASCII 字符。 ### 解决方案 #### 1. 设置默认编码为 UTF-8 可以在 Python 启动时修改默认编码为 UTF-8,以避免 ASCII 编码限制。对于 Python 2.x,可以通过创建 `sitecustomize.py` 文件并设置默认编码: ```python # 创建或编辑 sitecustomize.py 文件,路径通常为: # Python27\Lib\site-packages\sitecustomize.py import sys sys.setdefaultencoding('utf-8') ``` 该方法可全局更改默认编码,适用于 pip 和 wheel 的安装过程[^4]。 #### 2. 修改 pip 缓存路径 如果错误是由于缓存路径中含有非 ASCII 字符引起的,可以将 pip 的缓存目录指定到一个不含特殊字符的路径下: ```bash pip install --cache-dir /tmp/pip_cache wheel ``` 或者设置环境变量来改变默认缓存路径: ```bash export PIP_CACHE_DIR=/tmp/pip_cache ``` #### 3. 使用 `PYTHONIOENCODING` 环境变量 设置 `PYTHONIOENCODING` 环境变量为 `utf-8` 可强制 Python 使用 UTF-8 处理输入输出流: ```bash export PYTHONIOENCODING=utf-8 ``` #### 4. 升级到 Python 3.x Python 3.x 默认使用 UTF-8 编码处理字符串,从根本上避免了此类问题。建议升级到 Python 3 并使用虚拟环境管理依赖: ```bash python3 -m venv venv source venv/bin/activate pip install wheel ``` #### 5. 手动修复 UnicodeDecodeError 异常处理 在代码层面,可以对可能引发异常的地方进行编码转换处理,例如: ```python try: exename = sys.executable.encode(sys.getfilesystemencoding()) except UnicodeDecodeError: exename = sys.executable.decode(sys.getfilesystemencoding()).encode(sys.getfilesystemencoding()) ``` 这种方法适用于脚本或模块内部处理路径等信息时[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值