[英]How can strings with non-ASCII characters be retrieved with OptParse?
我正在使用OptParse
模塊來檢索字符串值。 OptParse
僅支持str
類型字符串 ,而不支持 unicode
字符串 。
所以讓我說我開始我的腳本:
./someScript --some-option ééééé
法語字符,例如'é',是類型str
,在代碼中讀取時會觸發UnicodeDecodeError
:
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)
您可以在解析器處理它們之前解碼參數。 舉個例子:
#!/usr/bin/python
# coding: utf-8
import os, sys, optparse
parser = optparse.OptionParser()
parser.add_option("--some-option")
# Decode the command line arguments to unicode
for i, a in enumerate(sys.argv):
sys.argv[i] = a.decode('ISO-8859-15')
(opts, args) = parser.parse_args()
print type(opts.some_option), opts.some_option
這給出了以下輸出:
C:\workspace>python file.py --some-option préférer
<type 'unicode'> préférer
我選擇了ISO / IEC 8859-15代碼頁,因為它似乎最適合您。 如果需要,適應。
輸入以控制台編碼返回,因此根據您更新的示例,使用:
print opts.some_option.decode(sys.stdin.encoding)
unicode(opts.some_option)
默認使用ascii
作為編碼。
我相信您的錯誤與以下內容有關 :
例如,要編寫包含歐元貨幣符號的Unicode文字,可以使用ISO-8859-15編碼,歐元符號的序數值為164.此腳本將打印值8364(對應於歐元符號的Unicode代碼點) )然后退出:
# -*- coding: iso-8859-15 -*-
currency = u"€"
print ord(currency)
#!/usr/bin/python
# coding: utf-8
import os, sys, optparse
reload(sys)
sys.setdefaultencoding('utf-8')
parser = optparse.OptionParser()
parser.add_option(u"--some-option")
(opts, args) = parser.parse_args()
print opts.print_help()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.