python - 在 Python 中获取字符串和 csv 文件的正确编码

标签 python encoding csv

我在 Python 中使用 mechanize 从网站获取一些数据并向其发送新数据。

问题是该网站是法语的,所以我得到的是菱形问号 (�) 而不是 éÉÀàùÙîû 等各种字符。

我试着在 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

'é' 看起来不错,但是当我尝试用 mechanize 填充网站上的文本字段并提交它时,'é' 现在在实际网站上看起来像 '�'。

编辑:

这是我读取csv文件中数据的代码:

subscriberReader = csv.reader(open(path, 'rb'), delimiter=';')
subscribers = []

for row in subscriberReader:
    subscribers.append(Subscriber(row[0], row[1], row[2]))

然后我使用 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()

我尝试了多种方式来对字符进行编码,但我想我做的不正确。我很乐意尝试答案/评论中提出的任何建议。

至于该网站,它没有指定它在 header 中使用的编码。

最佳答案

首先,您提到要将文字放入代码中。为此,您需要告诉 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() 将其解码为 un​​icode 对象,并使用它从那里开始。

with open('test.txt', 'r') as f:
    myString = f.read().decode('latin-1')

关于python - 在 Python 中获取字符串和 csv 文件的正确编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784996/

相关文章:

python - 使用元类设置时,Django 迁移忽略 db_table

java - 为什么在将文本转换为 java 中的 xls 文件后写入文本时,输出会发生移位

android - React native 中的 CSV 预览

从 YAML 传递数据连接 MYSQL 数据库时,Python 抛出 'ProgrammingError: 1045'

python - 使用Bash工具解析JSON

encoding - 如何设置 libavcodec 以使用 4 :2:2 chroma when encoding MPEG-2 4:2:2 profile?

firefox - 使用 FireFox 和 HTTP(S) 测试脚本记录器时的 JMeter "Content encoding Error"

php - 每天从 CSV 文件更新 MySQL(存储过程中不允许加载数据)

python - Ansible - 如何从列表中删除项目?

java - 从命令行和代码设置系统属性有什么区别?