2009-04-01 7 views
6

Ich habe ein Python (2.5.4) Skript, das ich in cygwin (in einer DOS-Box unter Windows XP) laufe. Ich möchte ein Pfundzeichen (£) in die Ausgabe einschließen. Wenn ich dies tue, erhalte ich diesen Fehler:Welche Kodierung benötige ich, um ein GBP-Zeichen (Pfundzeichen) mit Python auf Cygwin in Windows XP anzuzeigen?

SyntaxError: Non-ASCII character '\xa3' in file dbscan.py on line 253, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 

OK. So sah ich in diesem PEP, und nun versucht, diese zu Beginn meines Skript:

# coding=cp437 

, dass der Fehler nicht mehr, aber die Ausgabe zeigt ú wo es £ zeigen sollte.

Ich habe ISO-8859-1 auch mit dem gleichen Ergebnis versucht.

Weiß jemand, welche Codierung ich brauche?

Oder wo könnte ich herausfinden?

Antwort

2

Es gibt zwei Codierungen hier beteiligt: ​​

  • Die Codierung des Quellcodes, die um korrekt sein muss für Ihre Eingabedatei zu meinen, was Sie denken, bedeutet es
  • Die Codierung der Ausgabe, Dies muss korrekt sein, damit die ausgegebenen Symbole wie erwartet angezeigt werden.

Es scheint, dass Ihre Ausgabe Codierung jetzt deaktiviert ist. Wenn dies in einem Terminalfenster in Cygwin ausgeführt wird, müssen Sie die Kodierung dieses Terminals anpassen.

EDIT: Ich lief das folgende Python-Programm in einem (nativ) Windows XP Terminal-Fenster, dachte, es etwas interessant war:

>>> ord("£") 
156 

156 ist sicherlich nicht der Codepunkt für das Pfund-Zeichen in der Latin1 Codierung Sie versucht. Es ist nicht seem to be in Window's Codepage 1252 entweder, was ich erwarten würde, dass mein Terminal zu verwenden ... Seltsam.

+0

Ah! Vielen Dank. So, jetzt muss ich herausfinden, welche Codierung in einer Windows DOS-Box zu verwenden ist ... – Ben

+0

Ihre Bearbeitung hat mein Problem gelöst! Ich bekomme ein £ -Zeichen, indem ich \ x9c drucke, ohne irgendeine Kodierung anzugeben. Seltsam, aber gut von mir! :-) – Ben

+0

Ihr Terminal scheint DOS zu emulieren, also CP437 oder CP850. – vartec

7

Der Unicode für ein Pfundzeichen ist 163 (dezimal) oder A3 in hex, daher sollte das Folgende unabhängig von der Codierung Ihres Skripts funktionieren, solange die Ausgabecodierung ordnungsgemäß funktioniert.

print u"\xA3" 
3

versuchen, die Codierung:

# -*- coding: utf-8 -*-

und dann Zeichen der '£' anzuzeigen:

print unichr(163) 
Verwandte Themen