実際の問題は、値ではなく値の表現が得られているようです。あなたがから値を取得している場所の上に任意のコントロールを持っている場合は
>>> x = u"gcc-4.3.2"
>>> x
u'gcc-4.3.2'
>>> repr(x)
"u'gcc-4.3.2'"
>>> str(x)
'gcc-4.3.2'
、私が最初にそこに行くとそれを扱うでしょう。
警告:あなたはあなたが取得しているデータを制御することはできません場合は
>>> x = u"ĝĝ"
>>> x
u'\u011d\u011d'
>>> repr(x)
"u'\\u011d\\u011d'"
>>> str(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
は、repr(x)
の値は次のとおりです。UnicodeはあなたがUnicode文字を持っている場合、あなたが問題に実行することができ、その理由のために異なっていますあなたは評価できる表現:
>>> x = "u'gcc-4.3.2'"
>>> eval(x)
u'gcc-4.3.2'
しかし、evalはhighly unsafe for a number of reasonsであることに注意してください。
あなたはより安全にUnicode文字列を抽出することに対処したい場合、あなたはこのような何か行うことができます:
>>> import re
>>> x = "u'gcc-4.3.2' u'C'"
>>> re.findall("u'(.*?)'", x)
['gcc-4.3.2', 'C']
ここでは、u''
に包まれた文字列に何かを抽出するために、正規表現を使用します。私たちは出力として["gcc-4.3.2' u'C"]
に終わらないことを保証するために、操作を非貪欲にするために.*?
を使用します。
どのように二重引用符で囲まれた文字列を最初に取得しましたか?あなたが最初にそれを修正する必要があるように思えます。 –
あなたは '' str(x) ''が必要なときに '' repr(x) ''を得ているようです。 –