2012-04-29 16 views
5

Estoy usando python 2.7. Intenté muchas cosas, como los códecs, pero no funcionó. Cómo puedo arreglar esto.Lectura de caracteres que no sean ASCII desde un archivo de texto

miarchivo.txt

wörd 

Mi código

f = open('myfile.txt','r') 
for line in f: 
    print line 
f.close() 

salida

s\xc3\xb6zc\xc3\xbck 

de salida es igual en Eclipse y la ventana de comandos. Estoy usando Win7. No hay ningún problema con ningún carácter cuando no leo de un archivo.

+3

Qué resultado espera usted? Técnicamente hablando, Python ha leído el archivo correctamente. – srgerg

+0

¿Por qué imprimes la línea carácter por personaje? ¿Por qué no simplemente decir 'para la línea en f: imprimir línea'? Cuando lo hice, imprimí "söcük" como lo deseaba. – srgerg

+0

Lo intenté pero no funcionó. Imprimió s \ xc3 \ xb6zc \ xc3 \ xbck. – Rckt

Respuesta

7
  1. en primer lugar - detectar la codificación

    from chardet import detect 
    encoding = lambda x: detect(x)['encoding'] 
    print encoding(line) 
  1. entonces - convertirlo str Unicode o la codificación por omisión:

    n_line=unicode(line,encoding(line),errors='ignore') 
    print n_line 
    print n_line.encode('utf8') 
1

Es la codificación terminal. Intente configurar su terminal con la misma codificación que está usando en su archivo. Te recomiendo que uses UTF-8.

Por cierto, es una buena práctica para decodificar a codificar todas sus entradas-salidas para evitar problemas:

f = open('test.txt','r')  
for line in f: 
    l = unicode(line, encoding='utf-8')# decode the input                     
    print l.encode('utf-8') # encode the output                        
f.close() 
+0

Ahora veo por qué están haciendo estándar UTF-8 en 3.0. (PEP 3120) – mgold

+2

@mgold: PEP 3120 tiene que ver con la codificación del archivo fuente (.py); no tiene nada que ver con el problema del OP con la codificación de entrada y/o salida. –

+0

Ooh. Buena atrapada. – mgold

7
import codecs 
#open it with utf-8 encoding 
f=codecs.open("myfile.txt","r",encoding='utf-8') 
#read the file to unicode string 
sfile=f.read() 

#check the encoding type 
print type(file) #it's unicode 

#unicode should be encoded to standard string to display it properly 
print sfile.encode('utf-8') 
#check the type of encoded string 

print type(sfile.encode('utf-8')) 
Cuestiones relacionadas