我正在使用该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)
输入以控制台编码返回,因此根据您更新的示例,使用:
print opts.some_option.decode(sys.stdin.encoding)
Run Code Online (Sandbox Code Playgroud)
unicode(opts.some_option)默认使用ascii作为编码。
| 归档时间: |
|
| 查看次数: |
1882 次 |
| 最近记录: |