Khi bạn nhập "我"
, trình thông dịch Python nhận được từ thiết bị đầu cuối đại diện cho ký tự đó trong bộ ký tự cục bộ của bạn, nó lưu trữ trong chuỗi byte-byte bởi vì ""
. Trên hệ thống UTF-8 của tôi, đó là . Trên máy của bạn, đó là '\xce\xd2'
vì bạn sử dụng GB2312. Điều đó giải thích giá trị của biến số a
.
Khi bạn nhập u"我"
, trình thông dịch Python không biết mã hóa nào là ký tự 我
. Nó giống như chuỗi ký tự thông thường: nó lưu trữ các byte của ký tự trong chuỗi Unicode, giải thích từng byte như một điểm mã Unicode, do đó kết quả sai u'\xce\xd2'
(hoặc, trên hộp của tôi, u'\xe6\x88\x91'
).
Sự cố này chỉ tồn tại trong trình thông dịch tương tác. Khi bạn viết các tập lệnh hoặc mô-đun Python, bạn có thể specify the encoding gần đầu và chuỗi Unicode sẽ xuất hiện ngay. Ví dụ, trên hệ thống của tôi, sau đây sẽ in từ Liberté hai lần:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print(u"liberté")
print("liberté")
Nguồn
2012-04-23 09:05:06
Bạn đang sử dụng thiết bị đầu cuối nào? Tôi không thể sao chép các kết quả trên thiết bị đầu cuối Unicode gnome của tôi ('c === u '\ u6211'') –
@ChrisMorgan Tôi kiểm tra các mã này trong IDLE. –
cũng có thể repro điều này với IDLE –