2009-04-01 12 views
6

Tôi có một tập lệnh python (2.5.4) mà tôi chạy trong Cygwin (trong một hộp DOS trên Windows XP). Tôi muốn bao gồm một bảng Anh (£) ở đầu ra. Nếu tôi làm như vậy, tôi nhận được lỗi này:Tôi cần mã hóa nào để hiển thị một dấu hiệu GBP (dấu thăng) bằng python trên cygwin trong 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. Vì vậy, tôi nhìn PEP đó, và bây giờ cố gắng thêm này đến đầu kịch bản của tôi:

# coding=cp437 

Đó dừng lại lỗi này, nhưng cho thấy sản lượng ú nơi mà nó sẽ hiển thị £.

Tôi cũng đã thử ISO-8859-1, với cùng một kết quả.

Có ai biết tôi cần mã hóa nào không?

Hoặc nơi tôi có thể tìm để tìm hiểu?

Trả lời

2

Có hai mã hóa liên quan như:

  • Mã hóa mã nguồn của bạn, mà phải đúng theo thứ tự cho tập tin đầu vào của bạn có nghĩa là những gì bạn nghĩ rằng nó có nghĩa là
  • Việc mã hóa đầu ra, điều này phải đúng để các biểu tượng được phát ra để hiển thị như mong đợi.

Dường như mã hóa đầu ra của bạn tắt ngay bây giờ. Nếu điều này đang chạy trong một cửa sổ thiết bị đầu cuối trong Cygwin, đó là mã hóa của thiết bị đầu cuối mà bạn cần phải phù hợp.

EDIT: Tôi chỉ cần chạy chương trình Python sau đây trong một (mẹ đẻ) cửa sổ terminal Windows XP, nghĩ rằng nó là một chút thú vị:

>>> ord("£") 
156 

156 chắc chắn là không phải là điểm mã cho các ký pound trong Mã hóa Latin1 bạn đã thử. Nó không phải seem to be trong Codepage 1252 của Window, mà tôi mong đợi thiết bị đầu cuối của tôi sẽ sử dụng ... Lạ lùng.

+0

Ah! Cảm ơn bạn. Vì vậy, bây giờ tôi phải tìm ra những gì mã hóa để sử dụng trong một Windows dos-box ... – Ben

+0

Chỉnh sửa của bạn đã giải quyết được vấn đề của tôi! Tôi nhận được một ký hiệu £ bằng cách in \ x9c, mà không chỉ định bất kỳ mã hóa nào. Lạ lùng, nhưng tốt thôi! :-) – Ben

+0

Thiết bị đầu cuối của bạn dường như mô phỏng DOS, vì vậy nó là CP437 hoặc CP850. – vartec

7

Ký hiệu Unicode cho một bảng Anh là 163 (thập phân) hoặc A3 theo hệ thập lục phân, vì vậy sau đây sẽ hoạt động bất kể mã hóa tập lệnh của bạn, miễn là mã hóa đầu ra hoạt động chính xác.

print u"\xA3" 
3

thử mã hóa:

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

và sau đó để hiển thị '£' dấu hiệu:

print unichr(163)