7se*_*seb 5 python shell encoding diacritics
编码时遇到问题.我正在使用版本
Linux2上的Python 2.7.2+(默认,2011年10月4日,20:03:08)[GCC 4.6.1]
我有像éà这样的口音.我的脚本使用utf-8编码
#!/usr/bin/python
# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)
用户可以使用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()
Run Code Online (Sandbox Code Playgroud)
在主循环'伪'shell中调用
while to_continue :
to_continue, feedback = action( unicode(rlinput(u'todo > '),'utf-8') )
os.system('clear')
print T, u"\n" + feedback
Run Code Online (Sandbox Code Playgroud)
数据作为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')
Run Code Online (Sandbox Code Playgroud)
所以在shell文件中:
feedback = jaune + str(t).decode('utf-8') + vert + u" supprimée"
Run Code Online (Sandbox Code Playgroud)
这就是我意识到我可能完全错误的编码/解码.所以我试着直接在rlinput中解码但是失败了.我在stackoverflow中读了一些帖子,重新阅读http://docs.python.org/library/codecs.html 等待我的python书,我迷路了:/
我想有很多不好的代码,但我的问题只与编码问题有关.你可以在这里找到的代码:(法语大多数意见,对不起这对使用的personnal和我是一个初学者,你还需要yapsy - http://yapsy.sourceforge.net/)(然后配置路径,然后在py_todo:./ todo_shell.py):http://bit.ly/rzp9Jm
所有 Unix 系统上的标准输入和输出都是基于字节的。这就是为什么你必须调用unicode
函数来获取它们的字符串。解码错误表明传入的字节不是有效的 UTF-8。
基本上,问题在于 UTF-8 编码的假设,这是无法保证的。unicode
通过将调用中的编码更改为'ISO-8859-1'
或将终端模拟器的字符编码更改为 UTF-8 来确认这一点。(Putty 在“翻译”菜单中支持此功能。)
如果上述实验证实了这一点,那么您的挑战是支持用户的区域设置并推断出正确的编码,或者可能让用户在命令行参数或配置中声明编码。环境$LANG
变量是在没有显式声明的情况下可以做的最好的事情,我发现它不能很好地指示所需的字符编码。
归档时间: |
|
查看次数: |
772 次 |
最近记录: |