繁体   English   中英

Python特殊字符编码

[英]Python Special Characters Encoding

我有一个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()

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

预先感谢您的宝贵时间。

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

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

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

某些英文版Windows旧版Windows组件可能需要“ cp1252”。 如果上述解码失败,请尝试此操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM