2010-11-28 21 views
21

Estoy tratando de escribir un script en Python para convertir archivos UTF-8 en archivos ASCII:script en Python para convertir de UTF-8 a ASCII

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

import sys 
import os 

filePath = "test.lrc" 
fichier = open(filePath, "rb") 
contentOfFile = fichier.read() 
fichier.close() 

fichierTemp = open("tempASCII", "w") 
fichierTemp.write(contentOfFile.encode("ASCII", 'ignore')) 
fichierTemp.close() 

Cuando ejecuto este script Tengo el siguiente error :

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 13: ordinal not in range(128)

Pensé que puede ignorar el error con el parámetro ignorar en el método de codificación. Pero parece que no.

Estoy abierto a otras formas de conversión.

+2

El problema es que nunca decodifica en primer lugar. –

+0

Recibió el error porque el carácter no existe en el juego de caracteres ASCII, por lo que no se puede convertir. A veces puede asignar el carácter UTF8 al carácter de ajuste visual más cercano en ASCII, como 'é' a' e', pero eso puede cambiar el significado de las palabras. Debe decidir si esa ruta funcionará para su aplicación. –

+0

¡Esto parece una muy mala idea! – tchrist

Respuesta

38
data="UTF-8 DATA" 
udata=data.decode("utf-8") 
asciidata=udata.encode("ascii","ignore") 
+13

Parece una mala receta para la pérdida de datos. – tchrist

+31

Debería esperar la pérdida de datos si desea convertir de una codificación de 8 bits a 7 bits. –

+3

Ignoré que primero tenía que decodificar. Funciona ahora gracias. Para responder a las preguntas, quiero hacer esto porque mi reproductor de MP3 solo puede mostrar archivos de letras codificados en ASCII. – Nicolas

6
import codecs 

... 

fichier = codecs.open(filePath, "r", encoding="utf-8") 

... 

fichierTemp = codecs.open("tempASCII", "w", encoding="ascii", errors="ignore") 
fichierTemp.write(contentOfFile) 

... 
+0

¡Gracias por su solución, también funciona! – Nicolas

5

UTF-8 es un superconjunto de ASCII. O bien su archivo UTF-8 es ASCII o no se puede convertir sin pérdida.

+8

Creo que es consciente de eso, de lo contrario, no estaría tratando de usar "ignorar". –

+1

@Ignacio Es cierto. Pero este me dejó preguntándome qué es lo que el autor está tratando de lograr. Podrían ser un culto a la carga, o tal vez su necesidad se resuelva mejor con algo como urlencode, o ser con pérdidas es simplemente aceptable. – Tobu

+0

Tengo miedo del culto a la carga. Desechar a todos los personajes que no aprecias es realmente insensible. – tchrist

Cuestiones relacionadas