6

パイソン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これを使用しているスクリプトでは、コマンド ラインの履歴を表示するためにインポートを行います。

4

1 に答える 1

8

バックスペースが最後の文字ではなく最後のバイトを削除しているようです。最終的に発生するのは、次のように入力することです。

68 c3 a5
h |  å

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

UTF-8では、最初のビットが設定されたバイト(c3)は、次のバイトにも最初のビットが設定されている必要があることを意味します(Wikipediaの説明を参照)。

ターミナルエミュレータとreadlineがUTF-8を使用していることを理解していることを確認してください。

于 2012-07-08T21:21:25.813 に答える