德语变音符号在Python 2.7中使用raw_input()读入

时间:2014-03-31 21:49:07

标签: python unicode diacritics raw-input

我是一名编程初学者,为iPython编写一个简单的控制台闪卡程序来学习德语单词。答案密钥是一个excel文件,我读入,组织并保存为unicode字符串。当用户需要向控制台输入德语单词时,会出现此问题。

我在顶部有这个:

# -*- coding: utf-8 -*-

然后我读入(通过键入控制台)德语单词Kaufhäuser

var = raw_input().decode('utf-8')

然后,当我在控制台中输入它时,我收到以下错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0x84 in position 5: 
invalid start byte

Stack Overflow上处理变音符号的其他解决方案似乎指向第一行代码,或解码字符串以将其转换为unicode。但在每种情况下,用户都将字符串输入到代码而不是使用raw_input()读取它,并且我总是收到错误消息。

1 个答案:

答案 0 :(得分:5)

您似乎在Windows控制台中运行代码。控制台不使用UTF-8,它使用代码页,可能是code page 437。如果使用'cp437'解码它,您应该获得正确的Unicode,或者更好地使用sys.stdin.encoding来获得正确的控制台编码。

var = raw_input().decode(sys.stdin.encoding)

编辑:一些实验表明,当您重定向输入时,sys.stdin.encoding会返回None。更强大的解决方案:

# 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)