获取字符串和csv的正确编码
我在Python中使用机械化从网站获取一些数据并发送新数据。
事情是这个网站是法文的,所以我用钻石形状( )代替各种角色,例如éÉààùÙîû和其他人。
我试着环顾Google和StackOverflow,发现并没有解决我的问题的各种答案。 我已经看到了建议尝试以下某一行的答案:
myString = éÀî
myString.encode('latin-1')
myString.encode('iso-8859-1')
unicode(myString, 'iso-8859-1')
但似乎没有一个工作。
我需要这种情况的两种情况是当我读取带有重音符号的硬编码字符串的csv文件时。 例如,以下是csv文件中的一行代码(实际上';'是分隔符):
Adam Guérin;myemail@mail.com;555-5555;2011-02-05
'é'看起来很好,但是当我尝试用机械化填充网站上的textField并提交时,'é'现在在实际网站上看起来像' '。
编辑:
这是我读取csv文件中的数据的代码:
subscriberReader = csv.reader(open(path, 'rb'), delimiter=';')
subscribers = []
for row in subscriberReader:
subscribers.append(Subscriber(row[0], row[1], row[2]))
然后我使用机械化将它发送到网站:
self.br.select_form('aspnetForm')
self.br.form['fldEmail'] = subscriber.email
self.br.form['fldName'] = subscriber.name
self.br.form['fldPhoneNum'] = subscriber.phoneNum
self.br.submit()
我尝试了各种方法来编码字符,但我想我没有正确地做。 我很乐意尝试任何在答案/评论中提出的建议。
至于网站,它没有指定它在头中使用哪种编码。
首先,你提到你想将文字放入你的代码中。 要做到这一点,你需要告诉Python你的脚本文件有什么编码。 你在文件的开头用注释声明来做到这一点(我假设你使用的是latin-1
)。
# -*- coding: latin-1 -*-
myString = u'éÀî'
其次,你需要能够使用字符串。 这不是特定于机械化的,但是包含一些基础知识应该是有用的:首先, myString
最终成为一个unicode对象(因为字面声明的方式与u''
)。 因此,要将其用作Latin-1编码,您需要调用.encode()
,例如:
with open('test.txt', 'w') as f:
f.write(myString.encode('latin-1'))
最后,在读取已编码的字符串(比如来自远程网站)时,可以使用.decode()
将其解码为一个unicode对象,并从此处使用它。
with open('test.txt', 'r') as f:
myString = f.read().decode('latin-1')
链接地址: http://www.djcxy.com/p/62087.html