Câu trả lời:
Các chuỗi chữ nghĩa là unicode theo mặc định trong Python3.
Giả sử đó text
là một bytes
đối tượng, chỉ cần sử dụngtext.decode('utf-8')
unicode
của Python2 tương đương với str
Python3, vì vậy bạn cũng có thể viết:
str(text, 'utf-8')
nếu bạn thích.
str
là unicode, tức là. nó được "giải mã" vì vậy nó làm cho không có ý nghĩa để gọi decode
vào nó
str(text, 'utf-8')
, văn bản phải là một chuỗi nhị phân. ví dụstr(b'this is a binary', 'utf-8')
Có gì mới trong Python 3.0 cho biết:
Tất cả văn bản là Unicode; tuy nhiên Unicode được mã hóa được biểu thị dưới dạng dữ liệu nhị phân
Nếu bạn muốn đảm bảo rằng bạn đang xuất utf-8, đây là một ví dụ từ trang này về unicode trong 3.0 :
b'\x80abc'.decode("utf-8", "strict")
Như một giải pháp thay thế, tôi đã sử dụng cái này:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
vì nó sẽ không thất bại trong cả 2 hoặc 3
from six import u as unicode
cái mà tôi muốn chỉ đơn giản là vì nó tự ghi lại nhiều hơn (vì sáu là lớp tương thích 2/3) hơn làunicode = str
Đây là cách tôi giải quyết vấn đề của mình để chuyển đổi các ký tự như \ uFE0F, \ u000A, v.v. Và cả biểu tượng cảm xúc được mã hóa bằng 16 byte.
example = 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\\uD83D\\uDE0D\\uD83D\\uDE0D\\u2764\\uFE0F Present Moment Caf\\u00E8 in St.Augustine\\u2764\\uFE0F\\u2764\\uFE0F '
import codecs
new_str = codecs.unicode_escape_decode(example)[0]
print(new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\ud83d\ude0d\ud83d\ude0d❤️ Present Moment Cafè in St.Augustine❤️❤️ '
new_new_str = new_str.encode('utf-16', 'surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream😍😍❤️ Present Moment Cafè in St.Augustine❤️❤️ '
Trong một chương trình Python 2 mà tôi đã sử dụng trong nhiều năm, có dòng này:
ocd[i].namn=unicode(a[:b], 'utf-8')
Điều này không hoạt động trong Python 3.
Tuy nhiên, chương trình hóa ra lại hoạt động với:
ocd[i].namn=a[:b]
Tôi không nhớ tại sao tôi đặt unicode ở đó ngay từ đầu, nhưng tôi nghĩ đó là vì tên có thể chứa các chữ cái Thụy Điển åäöÅÄÖ. Nhưng ngay cả khi chúng hoạt động mà không cần "unicode".
cách dễ nhất trong python 3.x
text = "hi , I'm text"
text.encode('utf-8')