gpt4 book ai didi

Python - 编码字符串 - 瑞典字母

转载 作者:可可西里 更新时间:2023-11-01 14:46:01 25 4
gpt4 key购买 nike

我在使用 Python 的 raw_input 命令 (Python2.6) 时遇到了一些问题,出于某种原因,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 的批处理脚本???一开始,但这不是一个干净的解决方案 IMO。

这里是 swedify:

def swedify(inp):
try:
return inp.decode('utf-8')
except:
return '(!Dec:) ' + str(inp)

关于如何让 raw_input 从 swedify() 读取我的返回值的任何解决方案?我试过 from encodings import getencoder、getdecoder 和其他方法,但没有更好的方法。

最佳答案

您提到您收到了一个编码错误,这促使您首先编写 swedify,并且您已经找到了围绕 chcp 的解决方案,这是一个 Windows 命令.

在带有 UTF-8 终端的 *nix 系统上,swedify 不是必需的:

>>> raw_input('Hur långt i kilometer är ditt mål: ')
Hur långt i kilometer är ditt mål: 100
'100'
>>> a = raw_input('Hur långt i kilometer är ditt mål: ')
Hur långt i kilometer är ditt mål: 200
>>> a
'200'

FWIW,当我确实使用swedify 时,我得到了与您相同的错误:

>>> def swedify(inp):
... try:
... return inp.decode('utf-8')
... except:
... return '(!Dec:) ' + str(inp)
...
>>> swedify('Hur långt i kilometer är ditt mål: ')
u'Hur l\xe5ngt i kilometer \xe4r ditt m\xe5l: '
>>> raw_input(swedify('Hur långt i kilometer är ditt mål: '))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 5: ordinal not in range(128)

您的 swedify 函数返回一个 unicode 对象。内置的 raw_input 只是对 unicode 对象不满意。

>>> raw_input("å")
åeee
'eee'
>>> raw_input(u"å")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 0: ordinal not in range(128)

您可能想在 Python 3 中尝试这个。请参阅此 Python bug .

还有兴趣:How to read Unicode input and compare Unicode strings in Python? .

更新 根据this blog post有一种方法可以设置系统的默认编码。这可能值得一试。

关于Python - 编码字符串 - 瑞典字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7315629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com