2009-04-01 13 views
6

Cygwin'de çalıştığım bir python (2.5.4) komut dosyası var (Windows XP'de bir DOS kutusunda). Çıktıya bir pound işareti (£) eklemek istiyorum. Bunu yaparsam, şu hatayı alırım:Windows XP'de cygwin'de python kullanarak bir GBP işaretini (pound işareti) görüntülemek için hangi kodlamayı kullanmalıyım?

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 

Tamam. Yani benim programın başında bu ekleyerek şimdi çalıştı o PEP baktım ve: hatayı durdu

# coding=cp437 

, ancak £ göstermelidir çıktı gösterileri ú.

ISO-8859-1'i de aynı sonuçla denedim.

Hangi kodlamaya ihtiyacım olduğunu bilen var mı?

Veya nerede bulabileceğimi görmek için?

cevap

2

Burada iki kodlamalar vardır:

  • senin girdi dosyası bunu
  • çıktı kodlama anlamı ne düşündüğünü anlama için sırayla doğru olmalıdır kaynak kodunun kodlaması, Beklenen şekilde görüntülenecek olan semboller için doğru olması gerekir.

Çıktı kodlamanız artık kapalıdır. Bu Cygwin'de bir terminal penceresinde çalışıyorsa, terminalin eşleşmesi gereken kodlamadır.

DÜZENLEME: Sadece, bir (yerel) Windows XP terminal penceresinde aşağıdaki Python programı koştu biraz ilginç olduğunu düşündüm:

>>> ord("£") 
156 

156 kesinlikle pound işareti codepoint değil Latin1 kodlamayı denediniz. Penceremin Codepage 1252'sinde seem to be da bulunmuyor, terminalimin kullanmasını beklerdim ... Tuhaf.

+0

Ah: '£' işaretini göstermek için daha sonra

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

ve! Teşekkür ederim. Şimdi bir Windows dos kutusunda hangi kodlamanın kullanılacağını bulmalıyım. – Ben

+0

Düzenlemem benim sorunumu çözdü! Herhangi bir kodlama belirtmeden, \ x9c yazdırarak bir £ işareti alıyorum. Garip ama benim tarafımdan iyi! :-) – Ben

+0

Terminaliniz DOS'a benziyor gibi görünüyor, yani CP437 veya CP850. – vartec

7

Unicode bir pound işareti için 163 (ondalık) veya onaltılık olarak A3'tür, bu nedenle çıktı kodlaması doğru şekilde çalıştığından, aşağıdaki kod dosyasının kodlamasına bakılmaksızın çalışmalıdır.

print u"\xA3" 
3

kodlamayı deneyin:

print unichr(163) 
İlgili konular