• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Mayron

[Python] Unescape de caracteres especiais ISO-8859-1

5 mensagens neste tópico

Olá, minha primeira contribuição de muitas (espero)...

Meu professor pediu pra eu fazer um programa em qualquer linguagem para trocar os caracteres especiais HTMLs que ele tinha.

Já que eu estava estudando Python resolvi implementar nessa linguagem...

#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-

"""
Script para unescape de caracteres especiais ISO-8859-1
"""

import htmlentitydefs
import re
import cgi

#Informações
origem = raw_input("Local do arquivo do arquivo original: ")
fim    = raw_input("Local do arquivo final: ")

pattern = re.compile("&(\w+?);")

def descape_entity(m, defs=htmlentitydefs.entitydefs):
   # callback: translate one entity to its ISO Latin value
   try:
       return defs[m.group(1)]
   except KeyError:
       return m.group(0) # use as is

def descape(string):
   return pattern.sub(descape_entity, string)

#Abre os arquivos para manipulação de dados
f = open(origem)
w = open(fim,'w')

#Operações
try:
   novo = descape(f.read())
   w.write(novo)
finally:
   f.close()
   w.close()
   print "Finalizado!!!"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, o inverso:

def escape(string):
    newstring = ''
    for char in string:
        if ord(char) < 32 or ord(char) > 126:
            char = "%s;" % (ord(char))
        newstring += char
    return newstring

Não testei.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

arquivo original:

><ááââ
Por exemplo, ©, que é o símbolo ©, ® para ®, e § para §.>

resultado:

><ááââPor exemplo, ©, que é o símbolo ©, ® para ®, e § para §.>

ele está dando o número da posição na tabela ASCII ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa dúvida é em relação a que código?

O meu aqui funciona:

>>> def escape(x):
y = ''
for char in x:
	if ord(char) < 32 or ord(char) > 126:
		char = "%s;" % (ord(char))
	y += char
return y

>>> escape("OláááeéééíííóuÙòÓ")
'OláááeéééíííóuÙòÓ'
>>> 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora