Ada*_*ith 7 python csv encoding
我在Python中使用mechanize从网站获取一些数据并向其发送新数据.
事情是该网站是法语,所以我得到一个菱形( )的问号,而不是éÉÀàùÙîû和其他人的各种字符.
我试着在谷歌和StackOverflow上四处寻找并发现了各种不能解决问题的答案.我已经看到了建议尝试以下其中一行的答案:
myString = éÀî
myString.encode('latin-1')
myString.encode('iso-8859-1')
unicode(myString, 'iso-8859-1')
Run Code Online (Sandbox Code Playgroud)
但这些似乎都不起作用.
我需要这两个的情况是当我读取带有重音的csv文件和包含重音的硬编码字符串时.例如,这是csv文件中的一行(实际上是';'是分隔符):
Adam Guérin;myemail@mail.com;555-5555;2011-02-05
Run Code Online (Sandbox Code Playgroud)
'é'看起来不错,但是当我尝试用机械化填充网站上的textField并提交它时,'é'现在在实际网站上看起来像' '.
编辑:
这是我在csv文件中读取数据的代码:
subscriberReader = csv.reader(open(path, 'rb'), delimiter=';')
subscribers = []
for row in subscriberReader:
subscribers.append(Subscriber(row[0], row[1], row[2]))
Run Code Online (Sandbox Code Playgroud)
然后我使用mechanize将其发送到网站:
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()
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法来编码字符,但我想我没有正确地做到这一点.我很乐意尝试在答案/评论中提出的任何建议.
至于网站,它没有指定它在标题中使用的编码.
首先,您提到您想将文字放入代码中。为此,您需要告诉 Python 您的脚本文件的编码方式。您可以在文件开头使用注释声明来执行此操作(我假设您正在使用latin-1)。
# -*- coding: latin-1 -*-\nmyString = u'\xc3\xa9\xc3\x80\xc3\xae'\nRun Code Online (Sandbox Code Playgroud)\n\n其次,您需要能够使用字符串。这不是特定于机械化的,但涵盖一些基础知识应该是有用的:首先,myString最终成为一个 unicode 对象(因为使用 声明文字的方式u'')。因此,要将其用作 Latin-1 编码,您需要调用.encode(),例如:
with open('test.txt', 'w') as f:\n f.write(myString.encode('latin-1'))\nRun Code Online (Sandbox Code Playgroud)\n\n最后,当读取编码的字符串(例如,从远程网站)时,您可以将.decode()其解码为 unicode 对象,并从那里使用它。
with open('test.txt', 'r') as f:\n myString = f.read().decode('latin-1')\nRun Code Online (Sandbox Code Playgroud)\n