umgehen können Würde wirklich schätzen, wenn jemand mir helfen kann, entweder die Probleme zu beheben, die ich unten beschreiben, oder (worst case) vorschlagen alternative Umgebung, die funktionieren würde (obwohl ich verabscheue bin auf Windows 10 aktualisieren)Puking Blut: wie man ein Scrapy, Python und Postrgres Ökosystem in Windows 7, die mit Unicode
ich Schabe meist-Englisch Webseiten von einer japanischen Website. Ein paar Pflichtfelder haben Kanji in ihnen.
Ich benutze Scrapy, Postgres 9.5 und Python 2.7 auf einer Windows 7-Installation.
Scrapy muss in einer cmd.exe-Shell ausgeführt werden, und ich untersuche die Datenbankergebnisse in einer psql.exe-Instanz, die auch in einer cmd.exe-Shell ausgeführt wird. Ich habe Console2-Anwendung für die cmd.exe verwendet.
Es ist eine schreckliche Erfahrung in diesem Setup zu debuggen:
scrapy Schale
Ich bin nicht in der Lage alle Diagnose print()
Nachrichten zu tun, weil das Kanji eine Ausnahme
> print st['kanji_name']
> File "C:\Users\mds\Anaconda2\lib\encodings\cp437.py", line 12, in encode
> return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode characters in
> position 0-8: character maps to <undefined>
I verursacht habe Lösungen zum Ändern der aktiven Codepage mit chcp 65001
gesehen, aber scrapy versteht cp65001 offenbar nicht
C:\Users\_python\j_school>chcp 65001
Active code page: 65001
wirft den Fehler:
C:\Users\_python\j_school>scrapy crawl j_school
Traceback (most recent call last):
File "C:\Users\s\Anaconda2\lib\site-packages\twisted\internet\defer.py", line 588, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "C:\Users\_python\j_school\j_school\spiders\j_school_spider.py", line 141, in parse
print(st['english_name'])
LookupError: unknown encoding: cp65001
PSQL
PSQL bereits warnt mich beim Start
C:\Program Files\PostgreSQL\9.5\bin>psql m_experiment postgres
psql (9.5rc1)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
unabhängig davon, ob ich die chcp 65001
versuchen, werden psql noch nicht drucken diese.
m_experiment=# select * from schools limit 1;
ERROR: character with byte sequence 0xe6 0x9d 0xb1 in encoding "UTF8" has no equivalent in encoding "WIN1252"
Ich habe auch versucht die client_encoding zu setzen, aber dies bläst dann auf etwas und Postgres beharrt ich aus der Erinnerung bin!
Ich entdeckte mehrere Fehlerberichte über dieses Problem circa 2011, aber es wurde nie repariert ?? Wie auch immer, ich found a manual way to fix it, pset pager off
Beschwörung löst das Problem.
Nun kann psql zumindest eine Antwort ausspucken, obwohl es das Kanji nicht korrekt darstellt.
m_experiment=# select english_name, kanji_name from schools limit 1;
english_name | kanji_name
-------------------------------------+--------------------
TOKYO INTERNATIONAL JAPANESE SCHOOL | æ±京国際日本語å¦院
(1 row)
Ein Hack-Lösung war meine locale Japanisch zu ändern. Jetzt zeigt die Konsole mein Kanji richtig an. Aber es schraubt danach die Anzeige zusammen (die> Eingabeaufforderung erscheint merkwürdig und die Cursorgrafik stimmt nicht mit dem Cursor überein!).
Ich schlage vor, es vorzuschlagen, aber wenn Sie sehen, dass Sie Linux-Tools verwenden, haben Sie darüber nachgedacht, dies in Linux zu tun? Vielleicht in einer VM? –
Entweder das oder Cygwin (Ich würde einfach Linux gehen, du wirst es nie bereuen) –
@ evan058: Ich bin mir nicht sicher, ob Cygwin helfen würde, und es ist so ein Ungeheuer, dass ich es für einen letzten Ausweg aufbewahre. Gibt es eigentlich eine Cygwin-Version von Python? –