如何使用OptParse检索具有非ASCII字符的字符串?

6 python unicode ascii

我正在使用该OptParse模块来检索字符串值.OptParse仅支持str键入的字符串,而不支持unicode.

所以让我说我开始我的脚本:

./someScript --some-option ééééé
Run Code Online (Sandbox Code Playgroud)

键入的法语字符,例如'é',在代码中读取时会str触发UnicodeDecodeError:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 99: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

我使用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''
Run Code Online (Sandbox Code Playgroud)

有什么我可以OptParse用来检索unicode/ utf-8字符串?

更新:

看起来字符串可以检索并打印好了,但后来我尝试将该字符串与sqlite一起使用(使用APSW模块),并尝试以某种方式转换为unicode cursor.execute("..."),然后发生错误.

以下是导致错误的示例程序:

#!/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)
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 1

输入以控制台编码返回,因此根据您更新的示例,使用:

print opts.some_option.decode(sys.stdin.encoding)
Run Code Online (Sandbox Code Playgroud)

unicode(opts.some_option)默认使用ascii作为编码。