python的编码差异

时间:2015-12-28 15:54:13

标签: python encoding

# my scraper script file
#-*- coding: utf-8 -*-
from selenium import webdriver
import csv

browser = webdriver.Firefox()
browser.get("http://web.com")

f = open("result.csv", 'w')
writer = csv.writer(f)

然后第一个方法

element = browser.find_element_by_xpath("xpath_addr")
temp = [element.get_attribute("innerHTML").encode("utf-8")]
print temp                # ['\xec\x84\something\xa8']
writer.writerow(temp)

这导致使用我的语言的正确的csv文件。(例如한글)

但第二种情况,我认为只是有点不同

element = browser.find_element_by_xpath("xpath_addr")
temp = element.get_attribute("innerHTML").encode("utf-8")
print temp                # "한글" 
writer.writerow(temp)

然后csv文件充满了非角色的东西。这有什么不同?打印也有不同的结果,但为什么? (一定是问题,因为我对编码知之甚少)

1 个答案:

答案 0 :(得分:3)

首先,writerow接口期待类似列表的对象,因此第一个代码段对于此接口是正确的。但是在你的第二个片段中,该方法假设你作为参数传递的字符串是一个列表 - 并且这样迭代 - 这可能不是你想要的。您可以尝试writerow([temp])并查看它应与第一种情况的输出相匹配。

其次,我想警告你,Python csv模块是notorious for headaches with unicode,基本上它是未经过调整的。如果需要支持unicode,请尝试使用unicodecsv作为csv模块的替代品。然后,在将字符串写入文件之前,您不需要对字符串进行编码,您只需直接编写unicode对象并让库处理编码。