2012-04-09 33 views
5

Tôi đang cố nhập một số ký tự tiếng Tây Ban Nha thành các chuỗi trong chế độ tương tác. Ví dụ: option+e e để tạo 'é' để tôi đưa ra tuyên bố như string="él". Điều này làm việc trong các thiết bị đầu cuối, nhưng trong python (bất kỳ phiên bản tôi đã cài đặt, trong đó tôi có một số) nó không. Nó đơn giản không tạo ra gì cả. Điều này bao gồm cố gắng dán các ký tự. Nó chính xác là vấn đề được mô tả trong this question, đặc biệt là phần về dán và trong bình luận của mình cho câu hỏi của Alex, nơi ông chỉ ra rằng câu trả lời của Alex không giải quyết câu hỏi về sự thất bại của sao chép/dán liên quan đến utf-8 ký tự. Tôi có thể làm cái này như thế nào?Nhập các ký tự utf-8 vào python ở chế độ tương tác trên OS-X

+0

Chính xác bạn có ý gì bởi "trình thông dịch Python"? Tôi truy cập vào shell Python * thông qua * terminal - làm thế nào để bạn làm điều đó? –

+0

Tôi nghĩ rằng tôi có nghĩa là chế độ tương tác. Đã thay đổi câu hỏi. –

+0

Điều đó không trả lời được câu hỏi của tôi. Làm thế nào bạn nhận được để điều này bạn đang gọi là "chế độ tương tác"? –

Trả lời

0

sử dụng u trước chuỗi ký tự, để làm cho chuỗi này trở thành một chuỗi unicode.

string = u"El avión cayó del cielo" 

nếu điều đó không làm việc mà vấn đề nằm trong trình soạn thảo hoặc thiết bị đầu cuối của bạn, trong trường hợp đó thử thêm

#coding: utf8 

trong bất kỳ của 2 dòng đầu tiên của chương trình python của bạn và sử dụng một trình soạn thảo phù hợp với unicode ủng hộ.

+0

Đề xuất đầu tiên không hoạt động, tôi không thể nhập ký tự nào cả vào trình thông dịch.Tôi không chắc chắn những gì bạn có ý nghĩa trong đề xuất thứ hai. Tôi đang sử dụng các ứng dụng thiết bị đầu cuối đi kèm với OS-X và tôi có thể nhập các ký tự trong trình bao, nhưng không phải trong python ở chế độ tương tác. Tôi đã thay đổi mã hóa mặc định của mình thành 'utf-8' trong 'sitecustomize.py'. –

+1

Thay đổi hệ thống mã hóa mặc định rộng không được khuyến nghị nó có thể phá vỡ một số thư viện. – KurzedMetal

+0

** Không ** thay đổi mã hóa mặc định. 'Sys nhập khẩu; print (sys.stdout.encoding) 'nói? –

3

Thư viện readline mà Python sử dụng để đọc đầu vào tương tác không chấp nhận ký tự không phải ASCII được gửi bởi thiết bị đầu cuối. Điều này có nghĩa là trình giả lập thiết bị đầu cuối của bạn không cung cấp các ký tự trong mã hóa UTF-8, hoặc readline không được cấu hình để chấp nhận đầu vào UTF-8.

May mắn thay, dòng đọc được sử dụng bởi nhiều chương trình phổ biến, bao gồm vỏ bash, vì vậy có rất nhiều thông tin về cách làm cho nó hoạt động. Ví dụ: from this article:

Làm thế nào để đầu vào UTF-8 hoạt động chính xác?

  • Trong Terminal Inspector:
    • Trong phần thi đua, tắt Escape phi ASCII tùy chọn ký tự.
    • Trong phần Hiển thị, chọn Unicode (UTF-8) làm Bộ mã hóa ký tự.
  • Thêm dòng sau vào .profile:

    export LC_CTYPE=en_US.UTF-8 
    
  • Thêm các dòng sau để .inputrc của bạn:

    set meta-flag on 
    set input-meta on 
    set output-meta on 
    set convert-meta off 
    
  • Áp dụng thay đổi bằng cách thực hiện một source ~/.profilesource ~/.inputrc.

+0

Điều này cũng không may là không giải quyết được vấn đề đó – Rmatt

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