2016-06-09 2 views
1

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!).

enter image description here

+0

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? –

+0

Entweder das oder Cygwin (Ich würde einfach Linux gehen, du wirst es nie bereuen) –

+0

@ 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? –

Antwort

1

aus Ihrer Fehlermeldung ist cp437 die US-Windows-Konsole Standard-Kodierung. Sie könnten versuchen, Ihr Systemgebietsschema vorübergehend auf "Japanisch (Japan)" zu setzen, damit Sie Kanji auf die Konsole drucken können. Gehen Sie zu Systemsteuerung, Region und Sprache, Registerkarte Verwaltung und klicken Sie auf "Gebietsschema ändern ...". Nach dem Neustart sollte die Standardcodierung der Windows-Konsole für Japanisch geeignet sein.

Ich habe dies bereits getan, um Chinesisch auf die Konsole zu drucken. Die Einstellung betrifft nur Nicht-Unicode-Programme und die meisten Programme sind heutzutage vollständig Unicode.

+0

yah, grobe Lösung, aber es funktioniert meistens. Obwohl die Anzeige von Kanji in psql die Eingabeaufforderung und den Cursor squirrely zu machen scheint (fügte ein Bild davon in meinem ursprünglichen Beitrag hinzu) – user3556757

+0

@ user3556757 Versuchen Sie die ursprüngliche Konsole anstelle von Console2. Es hat wahrscheinlich mit Kanji zu tun, die volle Breite Zeichen verwenden und vielleicht behandelt die ursprüngliche Konsole es besser. Könnte sein. –