Como converter arquivo entre iso-8859-1 e utf-8 ?

1,900 views
Skip to first unread message

Cleverson Casarin Uliana

unread,
Nov 8, 2011, 1:27:08 PM11/8/11
to python...@googlegroups.com
Prezados, tenho de criar uma função para converter o arquivo fonte de
iso-8859-1 para utf-8 e outra para fazer o contrário. Achei um texto
de 2008 com o título "Tudo sobre Unicode em Python" ou algo assim,
perdi a URL agora, mas pelo que entendi, fiz o código abaixo[1] mas
não funciona. Ele não converte propriamente, apenas escreve no arquivo
destino todos os caracteres inclusive de nova linha. Alguma dica, por
favor ? Usando Python 2.7.1 em Windows XP:

[1]
def iso2UTF():
arqI = open(__file__)
textoI = arqI.read()
arqI.close()
textoU = unicode(textoI, "iso-8859-1")
arqU = open(__file__, "w")
arqU.write(repr(textoU))
arqU.close()
print "Convertido de iso-8859-1 para UTF-8."

def utf2Iso():
arqU = open(__file__)
textoU = arqU.read()
arqU.close()
textoI = textoU.encode("iso-8859-1")
arqI = open(__file__, "w")
arqI.write(repr(textoI))
arqI.close()
print "Convertido de UTF-8 para iso-8859-1."

Abraços e obrigado,
Cleverson

Thomaz de Oliveira dos Reis

unread,
Nov 8, 2011, 1:39:39 PM11/8/11
to python...@googlegroups.com
Cara, não testei aqui, mas acredito que você deve fazer a conversão da
seguinte forma:

no def iso2UTF():
textoU = textol.decode('iso8859-1').encode('utf-8')

e no def UTF2iso():
textoU = textol.decode('utf-8').encode('iso8859-1')

no python 2 existem 2 tipos de string, a string "normal", que pode ter
encoding (utf-8, iso) e a string "unicode" que tem o encode "imbutido"
quando você faz o decode na string, vc transforma ela em um "unicode",
e quando você faz o encode do "unicode" ele vira string de novo.
nos arquivos você tem que escrever em string se quiser definir o
encode do texto.

2011/11/8 Cleverson Casarin Uliana <clc...@gmail.com>:

> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
>    http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
>    python-brasi...@googlegroups.com
>

Jayson Reis

unread,
Nov 8, 2011, 1:40:56 PM11/8/11
to python...@googlegroups.com
Se for em unix like, usa o iconv.
iconv -fiso8859-1 -tutf-8 arquivo_entrada > arquivo_saida
Não use o mesmo arquivo de entrada como saída.
Abraços
Jayson Reis

2011/11/8 Thomaz de Oliveira dos Reis <tho...@gmail.com>

Leonardo Santagada

unread,
Nov 8, 2011, 1:49:30 PM11/8/11
to python...@googlegroups.com
2011/11/8 Thomaz de Oliveira dos Reis <tho...@gmail.com>:

> Cara, não testei aqui, mas acredito que você deve fazer a conversão da
> seguinte forma:
>
> no def iso2UTF():
> textoU = textol.decode('iso8859-1').encode('utf-8')
>
> e no def UTF2iso():
> textoU = textol.decode('utf-8').encode('iso8859-1')
>
> no python 2 existem 2 tipos de string, a string "normal", que pode ter
> encoding (utf-8, iso) e a string "unicode" que tem o encode "imbutido"
> quando você faz o decode na string, vc transforma ela em um "unicode",
> e quando você faz o encode do "unicode" ele vira string de novo.
> nos arquivos você tem que escrever em string se quiser definir o
> encode do texto.

explicação perfeita e o código tb esta certo. só lembre de não chamar
uma variavel do que ela não o textoU não é unicode mais, é uma string
de bytes já no encoding de saida. Ah e eu renomearia as funções,
latin12utf8 e o contrário, ou o iso completo, porque tem um monte de
enconding iso e um monte de encoding utf. Agora, isso tudo é um
detalhe bobo, mas quando estiver escrevendo um programa grande eu
recomendo ser claro sempre.


--
Leonardo Santagada

Cleverson Casarin Uliana

unread,
Nov 9, 2011, 7:01:17 AM11/9/11
to python...@googlegroups.com
OK, obrigado Thomaz, Jayson e Leonardo pelas respostas aqui; funcionou
cem porcento.

[ ]s

Em 08/11/11, Cleverson Casarin Uliana<clc...@gmail.com> escreveu:

Reply all
Reply to author
Forward
0 new messages