UnicodeDecodeError:'charmap'解码器无法解码位于X位置的字节0x9d:字符映射到<undefined>。

18

当我试图使用pip安装StringGenerator时,遇到了以下错误提示:

C:\Users\Administrator> pip install StringGenerator

Collecting StringGenerator 
Using cached StringGenerator-0.3.0.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\ADMINI~1\AppData\Local\Temp\2\pip-build-mdvrj2cf\StringGenerator\setup.py", line 7, in <module>
    long_description = file.read()
  File "c:\users\administrator\appdata\local\programs\python\python36-32\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1264: character maps to <undefined>

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\ADMINI~1\AppData\Local\Temp\2\pip-build-mdvrj2cf\StringGenerator\

是的,这就是导致错误的原因 :/ - Kyle
pip 的输出真的完整吗? - abarnert
此外,在这些错误中,“ADMINI~1”和“\AppData”之间真的有空格吗?如果是这样,那似乎是一个严重的问题,可能会破坏所有种类的东西,但我无法想象它如何发生。 - abarnert
我已经使用pip安装了其他模块,没有任何问题。不确定为什么会出现这个问题。这也是我刚刚部署的新服务器。 - Kyle
你需要发布pip安装错误的完整回溯(包括产生此错误的命令)。当前的错误消息不足以进行任何调试。 - Taku
显示剩余5条评论
4个回答

36

问题是在读取 README.txt 文件时在安装过程中引起的。在 Windows 中,默认编码是 cp1252,但该 readme 文件很可能使用 UTF8 编码。

错误消息告诉你,cp1252 编解码器无法解码具有字节 0x9D 的字符。当我浏览 readme 文件时,我发现了这个字符:(也称为:“右双引号标记”),它的字节为 0xE2 0x80 0x9D,其中包括有问题的字节。

你可以采取以下措施:

  1. 这里下载包
  2. 解压缩包
  3. 打开 setup.py
  4. 更改以下内容:

从:

with open('README.txt') as file:
    long_description = file.read()

转换为:

with open('README.txt', encoding="utf8") as file:
    long_description = file.read()

这将以适当的编码打开文件。

或者您可以完全删除这两行,也可以在setup()中第18行删除long_description=long_description

  1. 在控制台中运行python setup.py install
  2. 完成!

由于setup.py脚本中没有实际的设置,您可以直接从GitHub克隆源文件夹,包应该仍然可以正常工作。


10

在 "open('path', here)" 内部添加 encoding="utf8"

with open('path to csv file',  encoding="utf8") as csv_file:

1
谢谢!我正在使用以下代码加载JSON文件:import json with open('movie.json', encoding='utf8') as JSONFile: data = json.load(JSONFile) print(len(data['movie'][0]))但是它会抛出上述错误,通过在“with open()”中添加“encoding ='utf8'”,问题得到解决。 - sediq khan

6

我在Windows版本的Python上使用pip install时也遇到了这个问题。解决方法是设置以下环境变量:

PYTHONUTF8=1

如果它可能会干扰您的正常开发,您可以在安装完成后取消设置。


如果目标是获得UTF-8编码的Unicode输出,那么这是正确的,但对于不是这种情况的情况来说,这并不是一个合适的解决方案。 - tripleee

1

前往https://pypi.python.org/pypi/StringGenerator/0.3.0下载最新版本(或源代码),解压缩 .gz 文件,然后解压缩 .tar 文件。

接下来进入 StringGenerator-0.2.0 文件夹,打开终端并运行:

python setup.py build
python setup.py install 

或者从PowerShell运行:

python ./setup.py build
python ./setup.py install 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接