我在使用Python2.6的raw_input命令时遇到了一些问题。由于某种原因,raw_input无法获取swedify()生成的转换后的字符串,这导致了编码错误。我很清楚这个问题,这就是我创建swedify()的原因。
这是我想要做的:
elif cmd in ('help', 'hjälp', 'info'):
buffert += 'Just nu är programmet relativt begränsat,\nDe funktioner du har att använda är:\n'
buffert += ' * historik :: skriver ut all din historik\n'
buffert += ' * ändra <något> :: ändrar något i databasen, följande finns att ändra:\n'
print swedify(buffert)
这段代码很有效,可以将瑞典字符输出到控制台。但是当我尝试在同一代码中使用相同的\x??值打印这段文字时:
core['goalDistance'] = raw_input(swedify('Hur långt i kilometer är ditt mål: '))
core['goalTime'] = raw_input(swedify('Vad är ditt mål i minuter att springa ' + core['goalDistance'] + 'km på: '))
然后我得到了这个:
C:\Users\Anon>python löp.py
Traceback (most recent call last):
File "l÷p.py", line 92, in <module>
core['goalDistance'] = raw_input(swedify('Hur långt i kilometer är ditt mål: '))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 5: ordinal not in range(128)
我在网上搜索了一些“解决方案”,但它们都无效。有些人说我需要创建一个批处理脚本,在开头执行chcp ???,但我认为这不是一个干净的解决方案。
这里是swedify:
def swedify(inp):
try:
return inp.decode('utf-8')
except:
return '(!Dec:) ' + str(inp)
有没有解决方案可以让raw_input从swedify()读取我的返回值?我尝试了从encodings导入getencoder、getdecoder等,但都没有更好的结果。
swedify
并只调用raw_input
时,它对我来说运行良好。 - Ray Toal# coding=utf-8
才能使Python正确解析脚本:也许这会帮助其他人。 - Lynchå
,并且即使最终用户将其浏览器欺骗为使用与服务器发送的编码不同的编码,这也可以工作。但这类似于chcp的黑客技术,您确实要避免使用它。 - Ray Toal