Foros del Web » Programando para Internet » Python »

duda sobre caracteres \x93 \x94

Estas en el tema de duda sobre caracteres \x93 \x94 en el foro de Python en Foros del Web. Hola a tod@s!, estoy probando a procesar texto en python, para ello utilizo unos libros codificados en windows, en los que aparte del \r típico ...
  #1 (permalink)  
Antiguo 24/04/2011, 06:29
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
duda sobre caracteres \x93 \x94

Hola a tod@s!, estoy probando a procesar texto en python, para ello utilizo unos libros codificados en windows, en los que aparte del \r típico observo que tiene caracteres \x93 y \x94, que aparecen como un cuadradito con 4 números, esto a que se debe?.

Es por el idioma, la codificación?...A su vez estos símbolos son fáciles de eliminar del texto, pero habría alguna forma de convertir el texto para que estos no aparecieran?, lo digo por si aparte de estos caracteres que SI he visto hay otros que no y no los estoy eliminando..

Muchas gracias .
  #2 (permalink)  
Antiguo 24/04/2011, 10:37
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

Lo tengo medio solucionado...lo que he hecho es codificar el fichero que anteriormente tenia alfabeto occidental y codificación ISO-8859-15 a UNICODE utf-8.

Despues para trabajar con python he convertido el texto leido :

Código Python:
Ver original
  1. textoU =  unicode(contenido_fichero,'utf-8')

Ahora bien, yo en este texto estoy usando ER para buscar entre otras cosas el simbolo ", el problema es que yo defini la expresion para buscar el simbolo de esta forma:
Código Python:
Ver original
  1. (\")

Pero me dado cuenta que el fichero de texto que estoy procesando, NO tiene caracteres ", sino!.

Porque no se estan convirtiendo estos caracteres a los usados en linux " ?.

Agradeceria toda ayuda!

Última edición por javie_85; 24/04/2011 a las 10:46
  #3 (permalink)  
Antiguo 24/04/2011, 10:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: duda sobre caracteres \x93 \x94

Originalmente ASCII era usado en las antiguas computadoras como codificación, los valores podian ir desde 0 hasta 255 caracteres. Los cuales eran suficientes para todos los caracteres ingleses, de la "A" hasta "Z" mayúsculas, minúsculas y signos de puntuación y hasta caracteres especiales \n \r \t.

Hasta aquí todo bien, pero no paso mucho para que las computadoras se empezaran a expandir por todo el mundo y con ello el soporte para otros caracteres como áéí o incluso caracteres como あえい era vital para el uso de una computadora. Así que para eso se inventaron otros tipos de encoding, la parte triste de esta historia es que no se planifico bien y empezaron a surgir tantos tipos de encodings como se fueran necesitando. En lugar de hacer uno que soportara todos los lenguajes.

Bueno aqui un script sencillo de como codificar bien esos caracteres
Código Python:
Ver original
  1. #coding: utf-8
  2.  
  3. s = "á"
  4. print repr(s)
  5. print unicode(s, "utf-8")
  6.  
  7. s = '\xc3\xa1'
  8. print repr(s)
  9. print unicode(s, "utf-8")
Suponiendo que el encoding es utf-8
  #4 (permalink)  
Antiguo 24/04/2011, 11:06
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

Gracias razpeitia, pero perdoname, no es como yo lo he hecho?, esque no veo la diferencia...
  #5 (permalink)  
Antiguo 24/04/2011, 11:26
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: duda sobre caracteres \x93 \x94

Perdón, pero no había visto tu post :P

En tu segundo post, no veo ninguna pregunta clara.

Algo de código, una explicación de lo que tratas de hacer y el archivo que estas tratando de manejar serviría de mucho para poder ayudarte.
  #6 (permalink)  
Antiguo 24/04/2011, 11:45
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

A ver si me explico mejor pues. por ejemplo esto es un fragmento del texto que quiero procesar:

“¡Oh tío mío! ¡No hay inconveniente; podemos entrar sin peligro!”

De este texto quiero obtener los caracteres ", ahora bien, los caracteres " NO existen, porque por algun motivo que desconozco aparecen dos tipos de caracteres que lo sustituyen:

y

Mi dudas son varias, porque aparecen esos caracteres y no el caracter " ?, como hago para cambiar la codificación y que no aparezcan esos caracteres sino el mencionado y asi poder buscarlo?, si esto no es posible, como hago para obtener encontrar esos nuevos caracteres en el texto?. Todo esto lo quiero hacer con ER.

Espero haberme explicado mejor. Gracias por tu ayuda razpeitia


si a la cadena que he puesto de ejemplo le hago :

Código Python:
Ver original
  1. print repr(cadena)

me da:

Código Python:
Ver original
  1. u'\u201c\xa1Oh t\xedo m\xedo! \xa1No hay inconveniente; podemos entrar sin peligro!\u201d\n'

y originalmente estoy usando para buscar el caracter ":

Código Python:
Ver original
  1. craro = re.compile(r"""
  2. #Para explicar grupo
  3. (
  4. (\")
  5. )
  6. """, re.VERBOSE|re.U|re.I)

pero obviamente no funciona porque ese no es (") el caracter que aparece en el texto como he dicho

Última edición por javie_85; 24/04/2011 a las 11:58 Razón: ampliar información
  #7 (permalink)  
Antiguo 24/04/2011, 12:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: duda sobre caracteres \x93 \x94

Reemplaza esas comillas. Esas comillas son comillas unicode, como las comillas normales (ascii) pero estilizadas. Una derecha y otra izquierda.
Código Python:
Ver original
  1. #coding: utf-8
  2. s = u"“¡Oh tío mío! ¡No hay inconveniente; podemos entrar sin peligro!”"
  3. s = s.replace(u'“', u'"')
  4. s = s.replace(u'”', u'"')
  5. print s
  #8 (permalink)  
Antiguo 24/04/2011, 12:12
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

gracias razpeitia. SI quiero buscar con la ER esos caracteres en lugar de remplazarlos por el " como seria?
  #9 (permalink)  
Antiguo 24/04/2011, 12:26
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: duda sobre caracteres \x93 \x94

Código Python:
Ver original
  1. #coding: utf-8
  2. import re
  3. pattern = re.compile(u'(["“”])', re.I | re.U)
  4. s = u'“¡Oh tío mío! ¡No hay inconveniente;" podemos entrar sin peligro!”'
  5. print pattern.findall(s)
¿Te refieres algo así?
  #10 (permalink)  
Antiguo 24/04/2011, 12:31
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

Si creo que si razpeitia, esque no sabia como indicar esos caracteres, pero ya veo que hay que usar u' '.

Mil gracias de nuevo.
  #11 (permalink)  
Antiguo 25/04/2011, 06:19
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

razpeitia me ha surgido una duda, que pasa si en lugar de buscar por

Código Python:
Ver original
  1. pattern = re.compile(u'(["“”])', re.I | re.U)

necesito hacerlo de otra forma, en la que quiera usar en el regex

Código Python:
Ver original
  1. re.compile(r"""( expresion) """)
, a la r"""" me refiero, porque con esto la expresión que tu has puesto no funciona.

Por ejemplo buscando por las cadenas a las que corresponden las comillas,

\u201c y \u201d

Código Python:
Ver original
  1. craro = re.compile(r"""
  2. (\u201c)
  3. """
  4. , re.VERBOSE|re.U|re.I)

lo que pasa que no encuentro forma de detectar estas cadenas...

Mil gracias.
  #12 (permalink)  
Antiguo 25/04/2011, 07:22
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: duda sobre caracteres \x93 \x94

http://docs.python.org/reference/lex...tring-literals

Se pueden usar los modificadores "u" y "r" en la misma cadena:
Código Python:
Ver original
  1. ur'(["“”])'
es válido.
  #13 (permalink)  
Antiguo 25/04/2011, 07:27
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

Cita:
Iniciado por AlvaroG Ver Mensaje
[url]http://docs.python.org/reference/lexical_analysis.html#string-literals[/url]

Se pueden usar los modificadores "u" y "r" en la misma cadena:
Código Python:
Ver original
  1. ur'(["“”])'
es válido.
Gracias AlvaroG pero que pasaría en ese caso con las 3 ", r""" ?.

Aun así no hay forma de detectar los caracteres por el código \u201c por ejemplo?

P.D lo he probado con ur"(expresion) " y funciona perfectamente, así que gracias.

Última edición por javie_85; 25/04/2011 a las 08:24
  #14 (permalink)  
Antiguo 25/04/2011, 11:10
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: duda sobre caracteres \x93 \x94

sí que hay forma de detectar la secuencia de caracteres, en la página que vinculé hay algunos ejemplos.
  #15 (permalink)  
Antiguo 25/04/2011, 12:42
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

Pues se me habia pasado el link AlvaroG, gracias, de todas formas lo resolvi con el ur""" """. Debe ser que no me entero mucho pero no he visto ningun ejemplo en el link de como detectar caracteres unicode por su codigo, pero vamos en si mi problema lo tengo resuelto.

Gracias de nuevo.
  #16 (permalink)  
Antiguo 25/04/2011, 14:58
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: duda sobre caracteres \x93 \x94

Ya que buscabas una forma de combinar el modificador r con el modificador u, me refería a esto:
Cita:
When an 'r' or 'R' prefix is used in conjunction with a 'u' or 'U' prefix, then the \uXXXX and \UXXXXXXXX escape sequences are processed while all other backslashes are left in the string. For example, the string literal ur"\u0062\n" consists of three Unicode characters: ‘LATIN SMALL LETTER B’, ‘REVERSE SOLIDUS’, and ‘LATIN SMALL LETTER N’. Backslashes can be escaped with a preceding backslash; however, both remain in the string. As a result, \uXXXX escape sequences are only recognized when there are an odd number of backslashes.
Código Python:
Ver original
  1. patron = re.compile('["\u201c\u201d]')
debería funcionarte como patrón para hallar comillas.
  #17 (permalink)  
Antiguo 26/04/2011, 08:28
 
Fecha de Ingreso: enero-2011
Mensajes: 23
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: duda sobre caracteres \x93 \x94

AlvaroG gracias por tu ayuda, me habéis solucionado muchas dudas.

Etiquetas: caracteres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:59.