将字符代码转换为unicode [Python]

时间:2016-12-16 20:40:26

标签: python csv unicode

所以我有一个很大的csv法语动词,我用来制作一个程序,在csv中,带有重音字符的动词包含代码而不是实际的重音:

ê tre是ê tre,例如(至少我在Excel中打开文件时)

这是csv:

https://raw.githubusercontent.com/ianmackinnon/inflect/master/french-verb-conjugation.csv

至少在Chrome和Firefox中,代码会转换为正确的重音符号。我想知道是否将字符串在python中导入给定的变量,即。

...
for row in reader:
        inf_lst.append(row[0])
verb = inf_lst[2338]

#(verb = être)

如果有一个简单/内置的方法用正确的unicode打印出来以给出“être”?

我知道你可以通过在每个字符串中用ê替换ª来实现这一点,但由于这必须针对每种不同的可能重音进行,我想知道是否有更简单的方法。 谢谢,

3 个答案:

答案 0 :(得分:1)

您可以通过在字符串前加上'u'来使用unicode编码。

>>> foo = u'être' >>> print foo être

答案 1 :(得分:0)

这一切都归结为数据的字符编码。它可能是utf-8编码的,您正在使用本地代码页的Windows工具中查看它,该代码页为流提供了不同的显示。 csv doc examples

中介绍了如何使用文件进行读/写

您已经为我们提供了一个压缩的utf-8编码网页,requests模块擅长处理这类事情。所以,您可以阅读csv:

>>> import requests
>>> import csv
>>> resp=requests.get("https://raw.githubusercontent.com/ianmackinnon/inflect/master/french-verb-conjugation.csv",
...     stream=True)
>>> try:
...     inf_lst = list(csv.reader(resp.iter_lines(decode_unicode=True)))
... finally:
...     del resp
... 
>>> len(inf_list)
5362

答案 2 :(得分:0)

您有一个UTF-8编码的文件。 Excel喜欢该编码以字节顺序标记字符(U + FEFF)开头,或者它假定您的Windows版本的默认ANSI编码。要使用BOM获取UTF-8,请使用Notepad++之类的工具。在Notepad ++中打开文件。在编码菜单上,选择“在UTF-8-BOM中编码”并保存。现在它将在Excel中正确显示。

要编写Excel可以打开的文件,请使用编码utf-8-sig并编写Unicode字符串:

import io
with io.open('out.csv','w',encoding='utf-8-sig') as f:
    f.write(u'être')