奇怪的Python类型“文本”?

2024-01-12

我使用库“suds”与 SOAP 服务器进行通信。 请求成功完成后,我收到答复:

answer = client.invoke('RetrieveBLABLAObject', modelthings)

这个答案是请求对象的许多不同字段的结构。每个字段都是由“string”参数“_type”和参数“value”组成的结构,它们可以有不同的类型。

answer[key][value] - 返回参数“value”的值。但在调试模式下(我使用 Python 2.7.6 和 PyCharm),它显示值的类型为“Text”。不是“str”,不是“unicode”,而是“Text”。

如果我检查它

isinstance(obj[cur_key]['value'], unicode)

它告诉我它将这个文本视为“unicode”。但如果我将它与具有相同主体的 unicode 进行比较,它会返回 false:

if obj[cur_key]['value'] != u'String that I know is there':
    print("true") #it is printing, but it shouldn't

为什么会出现这种情况?如何将“文本”转换为 unicode? 我试过

obj[cur_key]['value'].decode('utf-8')

它异常地下降。我该如何处理这种“文本”类型?


您正在查看的子类unicode最有可能的。我认为你有一个例子suds.sax.text.Text() https://fedorahosted.org/suds/browser/trunk/suds/sax/text.py这里。由于这是一个subclass, isinstance(obj, unicode)是真的。

它的价值是already一个 unicode 字符串,因此解码将触发隐式encode首先用ASCII,这确实会失败。

您只需使用以下命令即可将类型转换为 unicode:

unicode(obj[cur_key]['value'])

但考虑到该值仍然可以通过 XML 转义;这.unescape()方法返回一个未转义的版本(它将返回self如果该值一开始就没有转义)。

与另一个字符串进行比较时,请确保它们是exactly平等的。 Unicode 值可以包含许多“隐藏”值,例如零宽度字符或可以表示的组合字符combined形式也。使用repr(value)获得转义表示,使此类代码点更加明显。

The suds.sax.text.Text()类没有特殊情况的相等测试,所以你的!=测试的工作方式与该值是相同的unicode字符串而不是子类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

奇怪的Python类型“文本”? 的相关文章

随机推荐