2009-04-01 13 views
6

Mam skrypt Pythona (2.5.4), który uruchamiam w cygwin (w polu DOS w systemie Windows XP). Chcę umieścić na wyjściu znak funta (£). Jeśli to zrobię, otrzymam ten błąd:Jakie kodowanie jest potrzebne, aby wyświetlić znak GBP (znak funta) przy użyciu Pythona na cygwin w systemie Windows XP?

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. Więc wyglądał w tym PEP, a teraz Próbowałem dodanie tego do początku mojego skryptu:

# coding=cp437 

który zatrzymał się błąd, ale pokazuje wyjściowych U, gdzie należy pokazać £.

Próbowałem także ISO-8859-1, z tym samym wynikiem.

Czy ktoś wie, którego kodowania potrzebuję?

Lub gdzie mogę szukać, aby dowiedzieć się?

Odpowiedz

2

Istnieją dwa kodowania zaangażowane tutaj:

  • Kodowanie kodzie źródłowym, które muszą być poprawne, aby Twój plik wejściowy na myśli to, co myślisz, oznacza to
  • Kodowanie wyjścia, które muszą być poprawne, aby symbole emitowane wyświetlały się zgodnie z oczekiwaniami.

Wygląda na to, że kodowanie wyjściowe jest wyłączone. Jeśli jest to uruchomione w oknie terminala w Cygwin, jest to kodowanie terminala, które musisz dopasować.

EDIT: Właśnie prowadził następujący program Python w (native) Windows XP okno terminala, że ​​było nieco ciekawe:

>>> ord("£") 
156 

156 z pewnością nie jest punkt kodowy na znak funta w Kodowanie Latin1 próbowałeś. Nie działa też na stronie kodowej Window 1252, której oczekiwałbym od mojego terminalu ... Dziwne.

+0

ah! Dziękuję Ci. Teraz muszę się dowiedzieć, jakie kodowanie użyć w systemie Windows ... – Ben

+0

Twoja edycja rozwiązała mój problem! Dostaję znak £, drukując \ x9c, bez określania żadnego kodowania. Dziwne, ale w porządku przeze mnie! :-) – Ben

+0

Twój terminal wydaje się emulować DOS, więc jest to CP437 lub CP850. – vartec

7

Kod Unicode dla znaku funta to 163 (dziesiętnie) lub A3 w języku heksadecymalnym, więc poniższe elementy powinny działać niezależnie od kodowania skryptu, o ile kodowanie wyjściowe działa poprawnie.

print u"\xA3" 
3

spróbować kodowanie:

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

a następnie wyświetli '£' znak:

print unichr(163) 
Powiązane problemy