正确编码文件到文件/读取编码文本以根除符号?

时间:2013-10-09 22:52:55

标签: python csv python-2.7 utf-8 encode

基本上在我的学生数据中,我遇到了一个问题:我在数据中得到了奇怪的sumbols,你可以看到MAIN £1.00什么时候显示MAIN £1.00

下面是我的代码片段,它为某些学生信息抓取网站以获取学生折扣,并最终将其写入档案。

# -*- coding: utf-8 -*-             
totals = main.find_all('p')
for total in totals:
    if total .find(text=re.compile("Main:")):
        total = total.get_text()
        if u"Main £" in total:
            pull1 = re.search(r'(MAIN) (\D\w+\D\d+)', total)
            pull2 = re.search(r'(MAINER) (\D\w+\D\d+)', total)
            if pull1:
                rpr_data.append(pull1.group(0).title())
                print pull1.group(0).title()
            if pull2:
                rpr_data.append(pull2.group(0).title())
                print pull2.group(0).title()
with open('RPR.txt','w') as rpr_file:
    rpr_file.write('\n'.join(rpr_data).encode("UTF-8"))

当我尝试在脚本Matching three variables from textfile to csv and writing variables to the csv on matched rows中重复使用此数据时,即使文本文件中的数据在写入CSV时没有奇怪的Â符号,该符号也会返回... < / p>

如何正确永久地根除此Â符号?

1 个答案:

答案 0 :(得分:3)

在各种西欧角色之前获得额外的Â字符几乎总是将UTF-8解释为Latin-1(或cp1252或其他一些“扩展的Latin-1”字符集)。*

这可能是您收到UTF-8输入并尝试将其作为Latin-1处理,或者您生成某人其他尝试处理为Latin-1的UTF-8输出。


如果你在输出文件中看到这些,最有可能的是你的代码在每一步都做正确的事情,并生成一个非常好的UTF-8文件...然后你试图查看在记事本等默认为OEM代码页的程序中,其OEM代码页为1252的Windows机器上的该文件。

如果是这样,有两种可能性:

  1. 不要这样做。将文件视为UTF-8。您可以告诉记事本以UTF-8而不是默认值打开文件。或者您可以使用其他编辑器/查看器。

  2. 如果您希望文件可以作为cp1252查看,或者“无论此机器上的OEM代码页是什么”,请以这种方式保存 - 例如,将最后一行更改为使用encode("cp1252")


  3. 如果你在print语句中看到它们,最有可能的是你的代码正在做正确的事情,但你的终端是一个Windows DOS提示符,它再次设置为代码页1252.请参阅{{ 3}}和Python, Unicode, and the Windows console可以解决在这里可能出错的所有不同事情,以及如何解决这些问题。


    *您可以从Python的快速行中看到这一点:u'\u00a3'.encode('utf-8').decode('latin-1') == u'\u00c2\u00a3'u'\u00c2'Â。使用其他方式永远不会导致此问题:u'\u00a3'.encode('latin-1').decode('utf-8')将提出UnicodeDecodeError

相关问题