我有以下字符串比较,其行为符合预期:
u'release V13.0.0: (Alumin\xadium) improved API' == u"release V13.0.0: (Aluminium) improved API"
(请注意,Alumin-ium之间有一个软连字符,在第二个字符串中未显示)
我的问题是如何在使用变量而不是文字字符串时重现此比较,因为使用unicode()
具有此输出:
unicode(rows[38][0]) == ("release V13.0.0: (Aluminium) improved API")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xad in position 24: ordinal not in range(128)
编辑:第一个字符串来自数据库,第二个字符串来自Gitlab API。
答案 0 :(得分:0)
这部分:"(Alumin\xadium)"
有一个不需要的转义字符,如果原始字符串是python代码,那么它会创建一个不需要的'\xad'
转义序列。将其替换为'\\xad'
,使其成为文字r'\xad'
答案 1 :(得分:0)
似乎行被编码为latin-1,因此在比较之前必须将它们解码为unicode:
>>> encoded = u'release V13.0.0: (Alumin\xadium) improved API'.encode('latin-1')
>>> unicode(encoded)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xad in position 24: ordinal not in range(128)
>>> unicode(encoded, 'latin-1')
u'release V13.0.0: (Alumin\xadium) improved API'