【问题标题】:python input UnicodeDecodeError:python输入UnicodeDecodeError:
【发布时间】:2012-07-08 21:12:45
【问题描述】:

python 3.x

>>> a = input()
hope
>>> a
'hope'
>>> b = input()
håpe
>>> b
'håpe'
>>> c = input()

start typing hå... delete using backspace... and change to hope

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 1: invalid continuation byte
>>> 

情况并不可怕,我正在解决它,但奇怪的是,删除时,字节被弄乱了。有其他人经历过吗?

终端历史显示它以为我输入了h?ope

有什么想法吗?

在使用它的脚本中,我确实导入了readline 以提供命令行历史记录。

【问题讨论】:

  • 听起来终端坏了,是什么终端?
  • 标准版,6-7岁的macbook,10.6.8,虽然我在跑遮阳板。
  • readline 可以cause the Mac terminal to crash。再想一想,问题在于 Mac 终端可能会崩溃,所以仍然是 Mac 问题。

标签: python unicode input


【解决方案1】:

看起来退格键正在删除最后一个字节,而不是最后一个字符。最终发生的是你输入:

68 c3 a5
h |  å

68 c3 6f 70 65
h |  |o |p |e

在 UTF-8 中,设置了第一位的字节 (c3) 意味着下一个字节也必须设置其第一位(请参阅Wikipedia's description)。

确保您的终端模拟器和 readline 了解您使用的是 UTF-8。

【讨论】:

  • 这当然是有道理的。至少我知道发生了什么!
  • @beoliver 我也遇到了同样的问题。如何解决?谢谢。
  • @mathsyouth 正如答案中所写:将您的终端仿真器以及 readline 本身设置为 UTF-8。在您的终端模拟器中,它可能在某处的设置中。 readline 会读取环境变量,即LC_ALL和好友。
猜你喜欢
  • 2021-09-17
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 2016-04-25
  • 2014-02-22
相关资源
最近更新 更多