cavotta Postado Fevereiro 20, 2007 Denunciar Share Postado Fevereiro 20, 2007 Olá pessoal,Estou aprendendo python ainda, especificamente a parte de lidar com XML.Eu fiz um parser pra XML em python, mas estou tendo problemas com caracteres do português:arquivo xml: página.xml <?xml version="1.0" encoding="ISO-8859-1"?> <texto>Ola mundo! Esta é minha primeira pagina gerada com python</texto> parser do xml: parseText.py: # -*- coding: iso-8859-1 -*- #! /usr/bin/env python import xml.sax.handler class BookHandler(xml.sax.handler.ContentHandler): def __init__(self): self.buffer = "" # def startElement(self, name, attributes): def characters(self, data): if data == '\n': self.buffer += "<br>" self.buffer += data # def endElement(self, name): import xml.sax import pprint def ParseText(XMLfilename): parser = xml.sax.make_parser() handler = BookHandler() parser.setContentHandler(handler) parser.parse(XMLfilename) return handler.buffer Trecho do meu gerador de páginas: file.py: #! /usr/bin/env python # -*- coding: iso-8859-1 -*- # variáveis text_name = "exemplo" f = open(text_name+".html",'w+') # parse text from parseText import ParseText texto = ParseText('pagina.xml') f.write(texto+'\n') # script identifier f.write("<!-- Página gerada automaticamente por um script python\n\ written in Eclipse-Pydev -->\n") f.close() Eu estou tendo o seguinte erro:QUOTEf.write(texto+'\n')UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 20: ordinal not in range(128)Que se deve ou 'é' do 'página.xml'Como proceder? Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Fevereiro 20, 2007 Denunciar Share Postado Fevereiro 20, 2007 f = open(text_name+".html",'w+') Tente usar a função open do módulo codecs: import codecs f = codecs.open(text_name+".html",'w+', 'iso-8859-1') Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 cavotta Postado Fevereiro 20, 2007 Autor Denunciar Share Postado Fevereiro 20, 2007 Olá, obrigado por responder, mas não deu certo não; Agora deu erro com isso:Traceback (most recent call last): File "/home/kunigami/workspace/test/src/xml/file.py", line 19, in ? f.write("</head>\n<body>\n<div id=\"tudo\">\n\ File "/usr/lib/python2.4/codecs.py", line 501, in write return self.writer.write(data) File "/usr/lib/python2.4/codecs.py", line 178, in write data, consumed = self.encode(object, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 50: ordinal not in range(128) Isso porque eu tentei: f.write("ééééé")O engraçado é que antes isso funcionava, mas a string que o parser retorna não funciona! O problema deve estar no modo como o parser está retornando a string!? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kakao Postado Fevereiro 20, 2007 Denunciar Share Postado Fevereiro 20, 2007 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 50: ordinal not in range(128)Isso porque eu tentei: f.write("ééééé") Assim deve funcionar: f.write(u"ééééé")Note o u antes do "ééééé" Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 cavotta Postado Fevereiro 20, 2007 Autor Denunciar Share Postado Fevereiro 20, 2007 Uhuuu! Funcionou perfeitamente! Aí fera, você me ajudou muito. Tava quebrando a cuca aqui faz uns 2 dias :)valeu! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
cavotta
Olá pessoal,
Estou aprendendo python ainda, especificamente a parte de lidar com XML.
Eu fiz um parser pra XML em python, mas estou tendo problemas com caracteres do português:
arquivo xml: página.xml
parser do xml: parseText.py: Trecho do meu gerador de páginas: file.py:Eu estou tendo o seguinte erro:
QUOTE
f.write(texto+'\n')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 20: ordinal not in range(128)
Que se deve ou 'é' do 'página.xml'
Como proceder? Obrigado.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.