Sous Windows7 64 bits, Python 2.7.5 Le robot d'exploration qui collecte le Foursquare Venue que j'utilise depuis longtemps est devenu un outil. Puisque je ne l'utilise que moi-même, l'entrée et la sortie sont assez appropriées. L'entrée est la latitude et la longitude du coin supérieur droit et inférieur gauche de la bbox, et la sortie est ID, nom du lieu, latitude et longitude, genre, Séparé par des virgules, en supposant qu'il soit écrit en csv. Puisqu'il était censé être exécuté sur la ligne de commande, la sortie est une sortie standard afin qu'elle puisse être écrite dans un fichier par redirection. Lors de l'attente d'une entrée, une erreur de sortie du texte quant à ce qu'il faut saisir (affichage tel que "latitude à l'extrémité nord-est"). Le code source est écrit en utf-8.
Exécutez comme suit sur la ligne de commande.
command1
$ python foursquare_crawler.py > washington_venues.csv
蛹 擲 遶 縺 邱 蠎 ヲ ・
Caractères déformés ... Le code source de cette partie est le suivant.
source1
sys.stderr.write("Latitude nord-est:")
first_ne_lat = float(sys.stdin.readline())
Je pensais simplement que le code de caractère de l'invite de commande était mauvais, j'ai donc temporairement changé le code de caractère de l'invite de commande de cp932 (Shift-JIS) à utf-8. Sous Windows, utf-8 s'appelle cp65001 ...
command2
$ chcp 65001
Active code page: 65001
Exécutez à nouveau.
command3
$ python foursquare_crawler.py > washington_venues.csv
北æ±ç«¯ã®ç·¯åº¦ï¼š
… (´ ・ ω ・ `) Cette fois, décrivez explicitement la sortie d'erreur comme utf-8 dans le programme.
source2
sys.stderr = codecs.getwriter('utf-8')(sys.stderr)
sys.stdin = codecs.getwriter('utf-8')(sys.stdin)
sys.stderr.write("Latitude nord-est:")
first_ne_lat = float(sys.stdin.readline())
J'ai également écrit que l'entrée standard devrait être reçue par utf-8. Mais pas de changement ...
Je me demandais ce qui s'était passé, alors je l'ai fait en Unicode.
source3
sys.stderr.write(u"Latitude nord-est:")
first_ne_lat = float(sys.stdin.readline())
De plus, restaurez le code de caractère de l'invite de commande et exécutez-le.
command3
$ chcp 932
Page de code actuelle: 932
$ python foursquare_crawler.py > washington_venues.csv
Latitude nord-est:
C'est fait (゜ ∀ ゜)! !! !! Je ne l'ai pas étudié en détail, mais comme les chaînes de caractères sont généralement gérées pour chaque octet, il semble y avoir divers problèmes avec les caractères pleine largeur tels que les caractères japonais et demi-largeur tels que les alphabets lors de la division d'une chaîne de caractères en plusieurs octets. Cependant, avec Unicode, un caractère est traité par un caractère, il semble donc qu'Unicode est meilleur lorsqu'il s'agit de japonais en Python.
Maintenant, rendons toutes les chaînes Unicode ...
Recommended Posts