Tôi đã thử nghiệm một lúc với Python 2.X và unicode. Nhưng tôi đã đạt đến một điểm mà nó không có ý nghĩa.Python 2.X: Tại sao tôi không thể xử lý Unicode đúng cách?
Vấn đề đầu tiên:
Một số mã sẽ giải thích rõ ràng những gì tôi có ý nghĩa. Biến txt ở đây để mô phỏng hàm dịch pyqt4. Trả về một QString.
# -*- coding: utf-8 -*-
from PyQt4 import QtCore
txt = QtCore.QString(u'può essere/sarà/日本語')
txtUnicode1 = unicode(txt, errors='replace')
txtUnicode2 = unicode(txt)
Khi in() - ing hai chuỗi unicode, tôi nhận được:
pu essere/sar/???
PUO essere/Sara/日本語
Chắc chắn tôi có thể nhận được điều tương tự bằng cách sử dụng QString .__ str __(), nhưng quan điểm của tôi là sự hiểu biết, vì vậy vì lợi ích của các đối số tôi muốn biết:
- Tại sao các lỗi = 'thay thế' thay thế tất cả các ký tự được mã hóa khi nó chỉ được thực hiện trong trường hợp có lỗi?
- Có vấn đề gì khi chỉ sử dụng unicode (QString) để đặt mã vạch QString thành chuỗi unicode phù hợp để hiển thị?
vấn đề thứ hai:
Tôi cố gắng để hiểu mã hóa/giải mã.
>>> a = u'può essere/sarà/日本'
>>> b = a.encode('utf-8')
>>> a
u'pu\xf2 essere/sar\xe0/\u65e5\u672c'
>>> b
'pu\xc3\xb2 essere/sar\xc3\xa0/\xe6\x97\xa5\xe6\x9c\xac'
>>> print a
può essere/sarà/日本
>>> print b
può essere/sarà/日本
- Liệu in giải mã a và b?
- UTF-8 được mã hóa được mã hóa là được giải mã hoàn toàn? Tôi có nên in chuỗi được mã hóa không?
- Sự khác biệt giữa chuỗi unicode được mã hóa và giải mã là gì?
Bạn có thể chỉ làm rõ nếu bạn đang sử dụng python 2.x hoặc 3.x. Trong khi nó (hiện tại) hiển nhiên dựa trên tiền tố chuỗi u, nó là thông tin quan trọng cho câu hỏi này, và trong tương lai tiền tố u sẽ được thêm trở lại python3 (pep414) – ironchefpython
Chắc chắn, Python 2.x (tôi chỉnh sửa) – Aki
Tôi đã thấy một buổi diễn tập cho [talk] này (http://lanyrd.com/2012/pycon/spccy/http://lanyrd.com/2012/pycon/spccy/) gần đây. Bạn nên xem video/slide của nó một khi pycon được thực hiện. – Daenyth