【发布时间】:2011-12-21 00:21:53
【问题描述】:
我遇到了编码问题。 我正在使用版本
Python 2.7.2+(默认,2011 年 10 月 4 日,20:03:08) [GCC 4.6.1] 在 linux2 上
我有带有 é à 等重音的字符。 我的脚本使用 utf-8 编码
#!/usr/bin/python
# -*- coding: utf-8 -*-
用户可以使用 raw_input() 和 .
键入字符串def rlinput(prompt, prefill=''):
readline.set_startup_hook(lambda: readline.insert_text( prefill))
try:
return raw_input(prompt)
finally:
readline.set_startup_hook()
在主循环“伪”shell中调用
while to_continue :
to_continue, feedback = action( unicode(rlinput(u'todo > '),'utf-8') )
os.system('clear')
print T, u"\n" + feedback
数据以pickle形式存储在文件中。
我设法让应用程序正常运行,但最终得到了一些愚蠢的东西,例如
核心文件:
class Task()
...
def __str__(self):
r = (u"OK" if self._done else u"A faire").ljust(8) + self.getDesc()
return r.encode('utf-8')
等等在shell文件中:
feedback = jaune + str(t).decode('utf-8') + vert + u" supprimée"
这就是我意识到编码/解码可能完全错误的地方。 所以我尝试直接在 rlinput 中解码但失败了。 我在stackoverflow中阅读了一些帖子,重新阅读http://docs.python.org/library/codecs.html 等待我的python书,我迷路了:/
我想有很多错误的代码,但我这里的问题只与编码问题有关。 您可以在此处找到代码:(大多数法语 cmets,抱歉,这是供个人使用的,我是初学者,您还需要 yapsy - http://yapsy.sourceforge.net/)(然后配置路径,然后在 py_todo 中:./todo_shell.py ) : http://bit.ly/rzp9Jm
【问题讨论】:
-
明确一点:您到底想实现什么?或者换句话说,为什么尝试 "to decode directly in rlinput" 失败了?您能否陈述一个用例来描述您的操作及其预期输出?在您当前的帖子中,我真的找不到要回答的问题...
-
@jro :raw_input 没问题,结果设置为 var。显示输入内容时出现错误:像这样:UnicodeDecodeError:'ascii'编解码器无法解码位置 10 的字节 0xc3:序数不在范围内(128)。我知道我可以修复它,但我更像是“我应该解码用户输入,在 var 设置时间()解码等”@eryksun:我今晚会挖掘它,谢谢
-
@eryksun:我刚刚实现了 unicode 方法:现在一切正常!谢谢
标签: python shell encoding diacritics