2009-06-13 45 views

Trả lời

28

Giả sử Python thấy tên dưới dạng một chuỗi bình thường, trước tiên bạn sẽ cần phải giải mã nó để unicode:

>>> name 
'Christensen Sk\xf6ld' 
>>> unicode(name, 'latin-1') 
u'Christensen Sk\xf6ld' 

Một cách khác để đạt được điều này:

>>> name.decode('latin-1') 
u'Christensen Sk\xf6ld' 

Lưu ý "u" ở phía trước của chuỗi, báo hiệu nó là không mã hóa. Nếu bạn in chữ này, chữ cái có dấu được hiển thị chính xác:

>>> print name.decode('latin-1') 
Christensen Sköld 

BTW: khi cần thiết, bạn có thể sử dụng phương pháp de "mã hóa" để biến mã unicode thành ví dụ: một chuỗi UTF-8:

>>> name.decode('latin-1').encode('utf-8') 
'Christensen Sk\xc3\xb6ld' 
+0

cảm ơn rất nhiều anh chàng. Vì vậy, nếu tôi cần nó để lưu nó vào một cơ sở dữ liệu tôi có thể giải mã nó và lưu vào cơ sở dữ liệu, phải không? – Vicky

+1

KHÔNG, đọc lại ví dụ của Mark. Sau khi giải mã dữ liệu từ bất kỳ thứ gì (latin1, cp1252, vv) thành unicode, bạn cần mã hóa chuỗi unicode với mã hóa (1) cơ sở dữ liệu hỗ trợ và (2) bảo toàn tất cả các ký tự unicode ... thường là UTF-8 . –

8

Tôi nghi ngờ rằng nó hoạt động chính xác. Theo mặc định, Python hiển thị các chuỗi trong mã hóa ASCII, vì không phải tất cả các thiết bị đầu cuối đều hỗ trợ unicode. Nếu bạn thực sự in chuỗi, mặc dù, nó sẽ làm việc. Xem ví dụ sau:

>>> u'\xcfa' 
u'\xcfa' 
>>> print u'\xcfa' 
Ïa 
+0

Nếu vấn đề là với thiết bị đầu cuối, nó sẽ được hiển thị đúng nếu tôi lưu nó vào cơ sở dữ liệu (MySQL) ?? – Vicky

+0

Có, nó sẽ, nhưng bạn phải chăm sóc mã hóa tập hợp ký tự/bộ ký tự DB của bạn. – securecurve

6

Cho một chuỗi byte với Unicode thoát b"\N{SNOWMAN}", b"\N{SNOWMAN}".decode('unicode-escape) sẽ tạo ra các chuỗi Unicode dự kiến ​​u'\u2603'.

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