[PYTHON] Zeichencode † Dunkelheit † Begegnungsbericht Teil1

Status

Unter Windows 7 64-Bit Python 2.7.5 Der Crawler, der Foursquare-Veranstaltungsorte sammelt, die ich seit langer Zeit verwende, wurde in ein Tool umgewandelt. Da ich es nur selbst benutze, sind Eingabe und Ausgabe ziemlich angemessen. Die Eingabe ist der Breiten- und Längengrad oben rechts und unten links von bbox, und die Ausgabe ist ID, Name des Veranstaltungsortes, Breite und Länge, Genre, Durch Kommas getrennt, vorausgesetzt, dass dies in csv geschrieben ist. Da es in der Befehlszeile ausgeführt werden sollte, ist die Ausgabe eine Standardausgabe, sodass sie durch Umleitung in eine Datei geschrieben werden kann. Wenn Sie auf die Eingabe warten, wird eine Fehlerausgabe des Textes bezüglich der Eingabe ausgegeben (Anzeige wie "Breitengrad am nordöstlichen Ende"). Der Quellcode ist in utf-8 geschrieben.

Symptome von † Dunkelheit †

In der Befehlszeile wie folgt ausführen.

command1


$ python foursquare_crawler.py > washington_venues.csv
Ebisu Rei

Verstümmelte Charaktere ... Der Quellcode für diesen Teil lautet wie folgt.

source1


sys.stderr.write("Nordöstlicher Breitengrad:")
first_ne_lat = float(sys.stdin.readline())

Ich dachte einfach, dass der Zeichencode der Eingabeaufforderung schlecht war, also habe ich den Zeichencode der Eingabeaufforderung vorübergehend von cp932 (Shift-JIS) in utf-8 geändert. In Windows heißt utf-8 cp65001 ...

command2


$ chcp 65001
Active code page: 65001

Führe es nochmals aus.

command3


$ python foursquare_crawler.py > washington_venues.csv
北東端の緯度:

… (´ ・ ω ・ `) Beschreiben Sie diesmal die Fehlerausgabe im Programm explizit als utf-8.

source2


sys.stderr = codecs.getwriter('utf-8')(sys.stderr)
sys.stdin = codecs.getwriter('utf-8')(sys.stdin)
sys.stderr.write("Nordöstlicher Breitengrad:")
first_ne_lat = float(sys.stdin.readline())

Ich habe auch geschrieben, dass die Standardeingabe von utf-8 empfangen werden soll. Aber keine Veränderung ...

Lösungen

Ich habe mich gefragt, was passiert ist, also habe ich es irgendwie zu Unicode gemacht.

source3


sys.stderr.write(u"Nordöstlicher Breitengrad:")
first_ne_lat = float(sys.stdin.readline())

Stellen Sie außerdem den Zeichencode der Eingabeaufforderung wieder her und führen Sie ihn aus.

command3


$ chcp 932
Aktuelle Codepage: 932
$ python foursquare_crawler.py > washington_venues.csv
Nordöstlicher Breitengrad:

Es ist geschafft (゜ ∀ ゜)! !! !! Ich habe es nicht im Detail untersucht, aber da Zeichenfolgen normalerweise für jedes Byte verwaltet werden, scheint es verschiedene Probleme mit Zeichen voller Breite wie Japanisch und Zeichen halber Breite wie Alphabeten zu geben, wenn eine Zeichenfolge in mehrere Bytes unterteilt wird. Bei Unicode wird jedoch ein Zeichen von einem Zeichen verarbeitet, sodass Unicode im Umgang mit Japanisch in Python anscheinend besser ist.

Jetzt machen wir alle Strings Unicode ...

Recommended Posts

Zeichencode † Dunkelheit † Begegnungsbericht Teil1
Zeichencode
Python-Zeichencode
Teil 1 Versuch, Mathematik zu codieren (∈)
Skript zur Überprüfung des Quellcode-Zeichencodes
2.x, 3.x Serienzeichencode von Python
In Python gelernter Zeichencode