零碎的编码数据错误

2024-09-30 20:33:12 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些原因,当我使用Scrapy从元素中获取文本值时,它会正确显示,但是当我将它放入数组中时,它的编码不正确。在

测试如下:我使用了Château这个词。在一个test的情况下,scrapy获取单词,然后将其打印并添加到数组中。在第二个例子test2中,我将从另一个测试打印的单词复制粘贴到数组中。在

下面是我的python脚本:

value=node.xpath('//AddrDisplayMemberSerialization/text()').extract_first()
print value;
array={'test':value,'test2':'Château'}
print array

数组会自动对值进行编码。python是自动执行还是Scrapy自动执行?在

enter image description here

为什么它们的编码方式不同?在


Tags: test文本元素编码value情况原因数组
2条回答

这个问题的发生是因为Python2和Python3之间的差异。如果你在Python3中这样做,它会立刻工作

Python 3.6.2 (default, Jul 17 2017, 16:44:45)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> value = 'Château'
>>> print (value)
Château
>>> array={'test':value,'test2':'Château'}
>>> print(array)
{'test': 'Château', 'test2': 'Château'}
>>>

现在让我们回到Python2

^{pr2}$

这是因为当您打印数组时,它在python中转换为字符串表示而不是unicode

>>> str(array)
"{'test': 'Ch\\xc3\\xa2teau', 'test2': 'Ch\\xc3\\xa2teau'}"
>>> print str(array)
{'test': 'Ch\xc3\xa2teau', 'test2': 'Ch\xc3\xa2teau'}

打印时要做的是做unicode转义

>>> print str(array).decode("unicode-escape")
{'test': 'Château', 'test2': 'Château'}

等等,这会弄乱印刷品吗?这是因为打印这些字符需要编码。简而言之,拉丁语

>>> print str(array).decode("unicode-escape").encode("latin-1")
{'test': 'Château', 'test2': 'Château'}

只要升级到python3,您的问题就会得到解决。但您需要将print语句更改为print(...)。或者用我展示的代码来训练编码

这就是它在终端上的显示方式。在

但是如果你想让它在utf-8中显示,只需在settings.py中这样做

FEED_EXPORT_ENCODING = 'utf-8'

相关问题 更多 >