Quiero que mi script Python pueda leer argumentos de línea de comandos Unicode en Windows. Pero parece que sys.argv es una cadena codificada en alguna codificación local, en lugar de Unicode. ¿Cómo puedo leer la línea de comando en Unicode completo?Leer caracteres Unicode desde argumentos de línea de comandos en Python 2.x en Windows
códigoEjemplo: argv.py
import sys
first_arg = sys.argv[1]
print first_arg
print type(first_arg)
print first_arg.encode("hex")
print open(first_arg)
En mi PC establecido para la página de códigos japoneses, me sale:
C:\temp>argv.py "PC・ソフト申請書08.09.24.doc"
PC・ソフト申請書08.09.24.doc
<type 'str'>
50438145835c83748367905c90bf8f9130382e30392e32342e646f63
<open file 'PC・ソフト申請書08.09.24.doc', mode 'r' at 0x00917D90>
de ese Shift-JIS codificado creo, y "funciona" para que nombre del archivo. Pero se rompe para nombres de archivo con caracteres que no están en el carácter Shift-JIS falla puesta a la final de la llamada "abierta":
C:\temp>argv.py Jörgen.txt
Jorgen.txt
<type 'str'>
4a6f7267656e2e747874
Traceback (most recent call last):
File "C:\temp\argv.py", line 7,
in <module>
print open(first_arg)
IOError: [Errno 2] No such file or directory: 'Jorgen.txt'
Nota-estoy hablando de Python 2.x, no Python 3.0. Descubrí que Python 3.0 da sys.argv
como Unicode adecuado. Pero aún es un poco pronto para la transición a Python 3.0 (debido a la falta de soporte de biblioteca de terceros).
Actualización:
Algunas respuestas han dicho que debería decodificar de acuerdo a lo que el sys.argv
está codificada en el problema con esto es que no es Unicode completo, por lo que algunos caracteres no son representables..
Aquí está el caso de uso que me da pena: tengo enabled drag-and-drop of files onto .py files in Windows Explorer. Tengo nombres de archivo con todo tipo de caracteres, incluidos algunos que no están en la página de códigos predeterminados del sistema. La secuencia de comandos de My Python no obtiene los nombres correctos de los archivos Unicode pasados a través de sys.argv en todos los casos, cuando los caracteres no son representables en la codificación de la página de códigos actual.
Ciertamente, hay algunas API de Windows para leer la línea de comandos con Unicode completo (y Python 3.0 lo hace). Supongo que el intérprete de Python 2.x no lo está usando.
¿Utiliza Windows japonés fuentes de trama en la consola por defecto? Esto probablemente limitaría la visualización de caracteres en la página de códigos de Windows-932. Consulte http://support.microsoft.com/kb/Q99795 (este es un problema separado para leer los argumentos, pero puede tener alguna incidencia) – McDowell
Compruebe esta pregunta hecha aquí en Stack Overflow, debe proporcionar la respuesta a su pregunta: http://stackoverflow.com/questions/477061/how-to-read-unicode-input-and-compare-unicode-strings-in-python – AlbertoPL
Sí, parece ser un duplicado exacto. –