Lire les caractères Unicode à partir d'arguments de ligne de commande en Python 2.x sur Windows

Je veux que mon script Python pour être en mesure de lire Unicode arguments de ligne de commande dans Windows. Mais il semble que sys.argv est une chaîne de caractères encodée dans certains locaux de l'encodage, plutôt que de l'Unicode. Comment puis-je lire la ligne de commande en Unicode?

Exemple de code: 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)

Sur mon PC mis en place pour les Japonais de page de code, j'obtiens:

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>

C'est Shift-JIS codées je crois, et il "travaille" pour que le nom de fichier. Mais il casse pour les noms de fichiers avec des caractères qui ne sont pas dans le Shift-JIS jeu de caractères—la finale "ouvrir" appel échoue:

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'

Remarque—je parle de Python 2.x, pas de Python 3.0. J'ai trouvé que Python 3.0 donne sys.argv comme bon Unicode. Mais c'est un peu tôt encore pour la transition vers Python 3.0 (en raison du manque de 3ème partie de la bibliothèque de support).

Mise à jour:

Quelques réponses ont dit que je doit décoder selon quelle que soit la sys.argv est encodé en. Le problème c'est qu'il n'est pas Unicode complète, de sorte que certains caractères ne sont pas représentable.

Voici les cas d'utilisation qui me donne du chagrin: j'ai permis de glisser-déposer des fichiers sur des .py fichiers dans l'Explorateur Windows. J'ai les noms de fichiers avec toutes sortes de personnages, dont certains pas dans le système de page de code par défaut. Mon script Python ne pas obtenir le droit des noms de fichiers Unicode transmises via sys.argv dans tous les cas, quand les personnages ne sont pas représentable dans le code actuel, le codage de la page.

Il y a certainement des API Windows pour lire la ligne de commande avec Unicode (et Python 3.0 t-il). Je suppose que le Python 2.x interprète n'est pas à l'utiliser.

  • Cochez cette question posée ici sur un Débordement de Pile, il doit fournir la réponse à votre question: stackoverflow.com/questions/477061/...
  • Oui, semble être un exact de la dup.
  • Cette question et ses réponses en parler raw_input() (même si la question de la mention "ligne de commande" une fois). Je suis intéressé dans la ligne de commande, par exemple sys.argv.
  • Bien essentiellement, vous boucle sur sys.argv comme ceci: pour les arg dans sys.argv: imprimer arg.decode("utf-8"), j'ai utilisé de l'impression, mais vous devez faire ce que vous avez besoin. Vous pouvez également choisir le bon encodage que vous avez besoin.
  • N'Japonaise de Windows utilisez les polices raster sur la console par défaut? Ce ne serait sans doute de les limiter à un affichage de caractères dans Windows 932 page de code. Voir support.microsoft.com/kb/Q99795 (c'est une question distincte de la lecture de la args, mais peut avoir une certaine incidence)