2011-03-10 70 views
8

Estoy leyendo nombres de archivo del sistema de archivos y quiero enviarlos como una matriz codificada JSON. El problema es que los archivos en el sistema de archivos se pueden almacenar en una codificación no válida, y necesito manejar esta situación para omitir nombres de archivo no válidos antes de pasarlo al json.dump, de lo contrario, fallará.Verificar la cadena utf8 válida en Python

¿Hay alguna manera de verificar que mi cadena (nombre de archivo) contiene caracteres utf-8 válidos?

+2

impresionarme. * ¿Por qué * los archivos no tienen nombres de archivo UTF-8 válidos? –

+0

es el nombre del archivo que no está codificado en utf-8 o son los datos en el archivo ?? estoy confundido. – mouad

+2

¿Qué tal un software defectuoso que crea nombres de archivos basados ​​en etiquetas ID3 sin verificar la codificación? ¿O montar (con las opciones incorrectas) un viejo sistema de archivos que usa una extraña codificación de caracteres para los nombres de archivo? –

Respuesta

17

¿Qué le parece intentar lo siguiente?

valid_utf8 = True 
try: 
    filename.decode('utf-8') 
except UnicodeDecodeError: 
    valid_utf8 = False 

... basado en una respuesta a una pregunta similar aquí: How to write a check in python to see if file is valid UTF-8?

+0

if isinstance (filename, unicode): print "cadena unicode" – mithuntnt

+0

@mithuntnt: la pregunta no es preguntar si una cadena de Python es un 'unicode'; pregunta si los bytes que componen un nombre de archivo en el sistema de archivos son UTF-8 válidos. –

+0

Para mí, en realidad tuve que atrapar el error UnicodeEncodeError en este caso ... –

Cuestiones relacionadas