【问题标题】:How to fix "Invalid encoding' error in python 3?如何修复 python 3 中的“无效编码”错误?
【发布时间】:2019-11-12 10:58:23
【问题描述】:

我正在创建一个基于 python 的 shell,其中使用了一个 latin-1 字符:“└──>”。所以我尝试了这个:

~python 3.8
# -*- coding:  latin-1 -*-

input_prompt = input('''
└──>  ''')

但它给了我错误:

Invalid encoding 'latin-1'
Saving as 'UTF-8'

为什么会显示这个?我在 python 2.7 中尝试了代码并且同样的错误。如何解决?

【问题讨论】:

  • 在 PyScripter 上保存得很好。你的代码编辑器/IDE 是什么
  • 我的编辑器是默认的:Python IDLE
  • 我建议你试试 PyScripter 或 PyCharm。文件在pyscripter上保存OK
  • 我尽量避免依赖文件编码(至少在涉及很少非 ascii 字符的情况下。这里我会使用:input_prompt="\u2514\u2500\u2500>"
  • Latin-1 中可用的所有字符也可以用 UTF-8 编码(它将 所有 个字符编码为 Unicode)。虽然我知道您希望控制编码的选择,但我不明白为什么您更喜欢 Latin-1 而不是 UTF-8。据我所知,没有真正的优势。

标签: python python-3.x utf-8 encode iso-8859-1


【解决方案1】:

提示字符串不是由可以用latin-1表示的字符组成,因此报错:

>>> s = '''└──>'''
>>> import unicodedata as ud
>>> for c in s:print(ud.name(c))
... 
BOX DRAWINGS LIGHT UP AND RIGHT
BOX DRAWINGS LIGHT HORIZONTAL
BOX DRAWINGS LIGHT HORIZONTAL
GREATER-THAN SIGN
>>> s.encode('latin-1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-2: ordinal not in range(256)

要么将源文件编码更改为可以支持这些字符的编码(例如 UTF-8),要么只使用可以编码为 latin-1 的字符。

【讨论】:

  • 这个字符来自 latin-1。它适用于从互联网下载的其他脚本,您想说它不是来自 latin-1?如何将此符号更改为想要的符号并将编码为 latin-1 或 utf-8 没有任何问题?
  • 你说的是“字符”,但实际上这是一个由四个字符组成的字符串。也许某处存在复制/粘贴问题?你能检查它是否是原始脚本中的单个字符(如果是,unicodedata.name(char)的值是什么)?
  • 不需要更多答案,我发现了问题。原始的 utf-8 格式是 'âââ>'。所以我必须将它们替换为 'âââ>' 然后添加标题。
【解决方案2】:

好的,对不起,我发现问题是我必须先将此字符编码为 utf-8,这样会得到:'âââ>',然后添加标题。所以我必须将这些字符替换为 'âââ>'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2020-10-04
    • 2013-07-25
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多