2010-04-27 36 views
9

Nếu tôi cố gắng để dán một ký tự unicode chẳng hạn như điểm giữa:Tại sao tôi không thể hiển thị ký tự unicode trong Trình thông dịch Python trên Mac OS X Terminal.app?

·

trong thông dịch viên python của tôi nó không có gì. Tôi đang sử dụng Terminal.app trên Mac OS X và khi tôi chỉ đơn giản là ở trong bash tôi không có rắc rối:

:~$ · 

Nhưng trong thông dịch viên:

:~$ python 
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 

^^ Tôi nhận được gì, nó chỉ bỏ qua rằng tôi chỉ dán nhân vật. Nếu tôi sử dụng thoát \ xNN \ xNN đại diện của các dấu chấm giữa '\ xC2 \ xb7', và cố gắng chuyển đổi sang unicode, cố gắng để hiển thị các dấu chấm gây người phiên dịch để ném một lỗi:

>>> unicode('\xc2\xb7') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128) 

Tôi có thiết lập 'utf-8' làm mã hóa mặc định của tôi trong sitecustomize.py như vậy:

>>> sys.getdefaultencoding() 
'utf-8' 

Điều gì mang lại? Nó không phải là Terminal. Nó không phải là Python, tôi đang làm gì sai ?!

Câu hỏi này không liên quan đến điều này question, vì indivdiual đó có thể dán unicode vào Terminal của mình.

+0

Tôi có cùng một vấn đề, nhưng mã hóa mặc định là ascii (dunno lý do): (( – DataGreed

Trả lời

6

unicode('\xc2\xb7') có nghĩa là giải mã chuỗi byte được đề cập với codec mặc định, là ascii - và dĩ nhiên không thành công (cố gắng đặt mã hóa mặc định khác chưa bao giờ hoạt động tốt và đặc biệt không áp dụng cho " các chữ được dán "- điều đó sẽ yêu cầu khác nhau bất kỳ cài đặt nào). Bạn có thể sử dụng thay vì u '\ xC2 \ xb7', và thấy:

>>> print(u'\xc2\xb7') 
· 

bởi vì đó là hai ký tự unicode tất nhiên. Trong khi:

>>> print(u'\uc2b7') 
슷 

cung cấp cho bạn một ký tự đơn unicode (một số thuyết minh phương Đông - xin lỗi, tôi không biết gì về những điều này). BTW, không phải trong số này là "dấu chấm giữa" mà bạn đang tìm kiếm. Có lẽ bạn có nghĩa là

>>> print('\xc2\xb7'.decode('utf8')) 
· 

dấu chấm ở giữa. BTW, cho tôi (python 2.6.4 từ python.org trên Mac Terminal.app):

>>> print('슷') 
슷 

loại ngạc nhiên cho tôi (tôi đã gặp lỗi ...! -).

+0

Wow, nếu có ai đó tôi muốn trả lời câu hỏi về Python khi tôi có câu hỏi, đó là Alex Martelli! Cảm ơn bạn! Tất cả các cuốn sách Python của bạn –

+2

Hrm, tất cả đều làm việc cho tôi và xóa bỏ một số nhầm lẫn tôi đã có trên unicode vs utf-8, nhưng tôi vẫn không thể dán một ký tự unicode trong trình thông dịch python trên Mac Terminal.app. Không thể đồng nghiệp của tôi khi anh ta sử dụng vỏ táo mặc định, nhưng anh ta có thể với phiên bản cổng python, tôi đoán đó là một vấn đề về ứng dụng hoặc khay nhớ tạm, –

+2

'u '\ xc2 \ xb7'' không giống với' '\ xc2 \ xb7'.decode (' utf8 ') '/' unicode (' \ xc2 \ xb7 ',' UTF-8 ') '.Trước đây là chuỗi Unicode gồm hai điểm mã (U + 00C2 (LATIN CAPITAL LETTER A WITH CIRCUMFLEX) và U + 00B7 (MIDDLE DOT)), chuỗi thứ hai đánh giá thành chuỗi Unicode với một điểm mã đơn (U + 00B7 (MIDDLE DOT)), mã hóa UTF-8 của nó yêu cầu hai byte). 'u '\ uc2b7'' là (như minh họa) một cái gì đó hoàn toàn khác nhau: U + C2B7 (HANGUL SYLLABLE SEUS). –

Các vấn đề liên quan