German Umlauts read in with raw_input() in Python 2.7
我编程初学者为iPython编写一个简单的控制台闪卡程序来学习德语单词。 答案密钥是一个excel文件,我读入,组织并保存为unicode字符串。 当用户需要向控制台输入德语单词时,会出现此问题。
我在顶部有这个:
1 | # -*- coding: utf-8 -*- |
然后我读入(通过键入控制台)德语单词Kaufh?user
1 | var = raw_input().decode('utf-8') |
然后,只要我在控制台中输入它,我就会收到以下错误:
1 2 | UnicodeDecodeError: 'utf8' codec can't decode byte 0x84 in position 5: invalid start byte |
Stack Overflow上处理变音符号的其他解决方案似乎指向第一行代码,或解码字符串以将其转换为unicode。 但是在每种情况下,用户都将字符串输入到代码而不是使用raw_input()读取它,并且我总是得到错误消息。
您似乎在Windows控制台中运行代码。 控制台不使用UTF-8,它使用代码页,可能是代码页437.如果用'cp437'解码它你应该得到正确的Unicode,或者更好的是使用
1 | var = raw_input().decode(sys.stdin.encoding) |
编辑:一些实验表明,当您重定向输入时,
1 2 3 | # get correct encoding and use it to decode user input encoding = 'utf-8' if sys.stdin.encoding in (None, 'ascii') else sys.stdin.encoding var = raw_input().decode(encoding) |