Python 输入unicode 时出现退格问题

问题描述 投票:0回答:1

我的问题其实是下面的问题:

python 输入 UnicodeDecodeError:

s = input("Enter a name:")
中,如果用户输入 Unicode 中的字符串,例如 Ì ,然后按退格键然后输入(我的意思是使用退格键来编辑输入),它会抛出
UnicodeDecodeError
:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdb in position 4: unexpected end of data

接受的答案没有显示任何具体的解决方案,并将其与终端和服务器编码相关。我坐了

LC_ALL=en_US.UTF-8
,但没有解决问题,终端也是UTF-8。我的PC操作系统是Ubuntu 20.04,服务器是ubuntu 16.04。该程序正在服务器上运行,我通过 ssh 连接到它。

这是服务器上

locale
的输出:

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

我在服务器上的python版本是3.7.10。我在我的笔记本电脑上用 python 3.8.5 测试了这个,没有问题。然后我使用 conda 在服务器上安装了 python 3.8.8,问题仍然存在。 另外这个问题不在Python控制台中,而是当我调用“

python or python3.8 inp.py
”时,当
input
命令位于名为
inp.py
的文件中时。

python linux ssh utf-8
1个回答
0
投票

我也面临着同样的问题。我正在阅读:

i=input(k + ': ')

每当我输入包含带有重音符号的字母时,我都会收到

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 4: invalid continuation byte
错误(位置不同),然后用退格键将其删除(即使我在退格键后键入其他字符,但如果我删除附加的非字符则不会)重音字符)。删除的字母不一定是最后一封。

有趣的是,仅当通过 jupyter 笔记本的终端执行脚本时(具有与 gnome 终端相同的 LANG 和 LC_* 环境变量设置),我才会收到此错误。如果我在 gnome 终端中运行相同的脚本,我无法重现该问题。

所以看起来在 jupyter 终端退格键只删除 2 字节 unicode 字符中的一个字节

Python 版本:

  • 问题设置:jupyter:3.11.7
  • 工作设置:ubuntu 22.04:3.10.12

Ps:我现在已经测试过了,如果我使用

cat > /tmp/testfile
并输入一个字符
á
,我将其删除,然后用退格键返回,然后关闭文件(Ctrl + d),然后在 ubuntu 中我最终得到一个空文件,而在 jupyter 中,文件中有一个
0xc3
字节,这证实了我的假设,所以我猜这可能是某个终端模拟器或浏览器问题。

© www.soinside.com 2019 - 2024. All rights reserved.