usando Python 3.2 en Windows 7 me estoy haciendo lo siguiente en IDLE:UnicodeEncodeError cuando se utiliza la función de compilación
>>compile('pass', r'c:\temp\工具\module1.py', 'exec')
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: invalid character
¿Alguien puede explicar por qué la declaración de compilación intenta convertir el nombre de archivo Unicode MBCS utilizando? Sé que sys.getfilesystemencoding devuelve 'mbcs' en Windows, pero pensé que esto no se usa cuando se proporcionan nombres de archivos Unicode.
por ejemplo:
f = open(r'c:\temp\工具\module1.py')
obras.
Para una prueba más completa guardar lo siguiente en un archivo codificado UTF-8 y ejecutarlo usando la versión estándar python.exe 3,2
# -*- coding: utf8 -*-
fname = r'c:\temp\工具\module1.py'
# I do have the a file named fname but you can comment out the following two lines
f = open(fname)
print('ok')
cmp = compile('pass', fname, 'exec')
print(cmp)
Salida:
ok
Traceback (most recent call last):
File "module8.py", line 6, in <module>
cmp = compile('pass', fname, 'exec')
UnicodeEncodeError: 'mbcs' codec can't encode characters in position 0--1: inval
id character
intentado localmente en XP y recuperar un objeto de código adecuado. ¿Se está ejecutando desde la CLI o se ejecuta a través de un archivo? – monkut
Voy a adivinar que no es la firma de llamada el problema, sino el contenido del archivo que causa el error Unicode. Verifique que "module1.py" esté codificado correctamente, con la firma de codificación asignada. – monkut
@monkut: en Python 3.x, no tiene que preocuparse por la codificación: si hay caracteres UTF-8 en el archivo, se representarán como caracteres UTF-8. – Makoto