簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM