【问题标题】:Python Special Characters EncodingPython 特殊字符编码
【发布时间】:2016-10-19 14:07:27
【问题描述】:

我有一个 python 脚本,它读取 CSV 文件并写入 XML 文件。我一直在尝试找出如何阅读特殊字符,例如:ç、á、é、í 等。脚本运行得非常好,没有特殊字符。那是脚本头:

# coding=utf-8

'''
@modified by: Julierme Pinheiro
'''
import os
import sys
import unittest
from unittest import skip
import csv
import uuid
import xml
import xml.dom.minidom as minidom
import owslib
from owslib.iso import *
import pyproj
from decimal import *
import logging

我从 csv 文件中检索信息的方式如下所示:

# add the title
                title = data[1]
                titleElement = identificationInfo[0].getElementsByTagName('gmd:title')[0]
                titleNode = record.createTextNode(title)
                titleElement.childNodes[1].appendChild(titleNode)
                print "Title:" + title

注意:如果 csv 文件中的第二列 data[1] 包含在“Navegação”中找到的特殊字符,则脚本将失败(它不会在xml 文件)。

基于空白模板 XML 创建新 XML 文件的方式如下所示:

 # write out the gemini record
                filename = '../output/%s.xml' % fileId
                with open(filename,'w') as test_xml:
                    test_xml.write(record.toprettyxml(newl="", encoding="utf-8"))
            except:
                e = sys.exc_info()[1]
                logging.debug("Import failed for entry %s" % data[0])
                logging.debug("Specific error: %s" % e)

    @skip('')
    def testOWSMetadataImport(self):
        raw_data = []
        with open('../input/metadata_cartapapel.csv') as csvfile:
            reader = csv.reader(csvfile, dialect='excel')
            for columns in reader:
                raw_data.append(columns)   

        md = MD_Metadata(etree.parse('gemini-template.xml'))
        md.identification.topiccategory = ['farming','environment']
        print md.identification.topiccategory
        outfile = open('mdtest.xml','w')
        # crap, can't update the model and write back out - this is badly needed!!
        outfile.write(md.xml) 


if __name__ == "__main__":
    unittest.main()

有人可以帮忙解决这个问题吗?

提前感谢您的宝贵时间。

【问题讨论】:

  • Python 2 CSV 文档中有 examples 说明如何处理 Unicode 数据。顺便说一句,您应该以二进制模式打开 CSV 文件,但我猜您是在 Linux 上,所以除非您希望能够在 Windows 上运行您的脚本,否则您真的不需要为此烦恼。

标签: python xml csv


【解决方案1】:

那是 unicode。如果您使用的是 python 2.7,则 csv 无法读取 unicode。在 python 3.x 中,您可以在打开文件时传递 utf-8 选项。

在 python 中,您可以将数据 [1] 解码为 utf-8,如下所示。

title = data[1].decode('utf-8')

某些英文版 Windows 旧版 Windows 组件可能需要“cp1252”。如果上面的解码失败,试试这个。

title = data[1].decode('cp1252')

【讨论】:

  • 亲爱的@VinayakKolagi,你已经达到了目标。我正在运行 python 2.7.1,我刚刚阅读了您的解决方案:(tulane.edu/~howard/CompCultES/unicode.html)
  • 嗨@VinayakKolagi,我在脚本头中插入了“导入编解码器”,我正在运行python 2.7.1,我无法解码变量。我收到以下错误。 -8.py”,第 16 行,解码返回 codec.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 1: invalid start byte。什么可能导致问题?
  • 看起来编码不在 utf-8 中。尝试我在答案中添加的 cp1252 解码。
  • 嗨@VinayakKolagi。就是这样。目标权:('cp1252')。谁在运行 python 2.7.1 时遇到这个问题,可以尝试这个解决方案。我的问题已经解决了。
  • 如果回答有帮助,请考虑接受。
猜你喜欢
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多