【发布时间】:2012-10-29 12:48:53
【问题描述】:
我正在使用OptParse 模块来检索字符串值。 OptParse only supports str typed strings,不是unicode。
假设我的脚本开始于:
./someScript --some-option ééééé
法文字符,如'é',正在输入str,读入代码时触发UnicodeDecodeErrors:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 99: ordinal not in range(128)
我使用了 unicode 内置函数,但要么出现错误,要么字符消失:
>>> unicode('é');
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
>>> unicode('é', errors='ignore');
u''
我可以做些什么来使用OptParse 来检索unicode/utf-8 字符串?
更新:
似乎可以检索并打印该字符串,但随后我尝试将该字符串与 sqlite 一起使用(使用 APSW 模块),并尝试使用cursor.execute("...") 以某种方式转换为unicode,然后出现错误.
这是一个导致错误的示例程序:
#!/usr/bin/python
# coding: utf-8
import os, sys, optparse
parser = optparse.OptionParser()
parser.add_option("--some-option")
(opts, args) = parser.parse_args()
print unicode(opts.some_option)
【问题讨论】:
-
Str 对象只是字节存储,因此如果输入是 UTF-8,则字符串将保存 UTF-8 值。哪里抛出了 unicode 错误?
-
我刚刚在 UTF-8 控制台上对此进行了测试,optparse 工作正常并将字符返回到控制台。你能澄清一下这个错误是在你的代码中还是在 optparse 中?
-
取决于您的程序在 optparse 上还是从头开始构建?在这种情况下,我会推荐 docopts 包而不是 optparse。你会真的很惊讶它解析 cli 参数是多么容易。
-
@Fuzzyfelt:感谢您的第二条评论,我的问题范围缩小了一点。