Saya menggunakan ini:
u = unicode(text, 'utf-8')
Tetapi mendapatkan kesalahan dengan Python 3 (atau ... mungkin saya lupa memasukkan sesuatu):
NameError: global name 'unicode' is not defined
Terima kasih.
Saya menggunakan ini:
u = unicode(text, 'utf-8')
Tetapi mendapatkan kesalahan dengan Python 3 (atau ... mungkin saya lupa memasukkan sesuatu):
NameError: global name 'unicode' is not defined
Terima kasih.
Jawaban:
String literal adalah unicode secara default di Python3.
Dengan asumsi itu text
adalah sebuah bytes
objek, gunakan sajatext.decode('utf-8')
unicode
Python2 setara dengan str
di Python3, jadi Anda juga bisa menulis:
str(text, 'utf-8')
jika kamu memilih.
str
adalah unicode, yaitu. itu "diterjemahkan" sehingga tidak masuk akal untuk memanggil decode
di atasnya
str(text, 'utf-8')
, teks harus berupa string biner. misalnyastr(b'this is a binary', 'utf-8')
Apa yang baru di Python 3.0 mengatakan:
Semua teks adalah Unicode; namun Unicode yang dikodekan direpresentasikan sebagai data biner
Jika Anda ingin memastikan Anda mengeluarkan utf-8, berikut adalah contoh dari halaman ini di unicode di 3.0 :
b'\x80abc'.decode("utf-8", "strict")
Sebagai solusinya, saya telah menggunakan ini:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
karena tidak akan gagal dalam 2 atau 3
from six import u as unicode
yang saya lebih suka hanya karena ini lebih mendokumentasikan diri (karena enam adalah lapisan kompatibilitas 2/3) daripadaunicode = str
Ini bagaimana saya memecahkan masalah saya untuk mengonversi karakter seperti \ uFE0F, \ u000A, dll. Dan juga emoji yang dikodekan dengan 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❤️❤️ '
Dalam program Python 2 yang saya gunakan selama bertahun-tahun ada baris ini:
ocd[i].namn=unicode(a[:b], 'utf-8')
Ini tidak berhasil dengan Python 3.
Namun, program tersebut ternyata berhasil dengan:
ocd[i].namn=a[:b]
Saya tidak ingat mengapa saya meletakkan unicode di tempat pertama, tetapi saya pikir itu karena namanya dapat berisi huruf Swedia åäöÅÄÖ. Tetapi bahkan mereka bekerja tanpa "unicode".
cara termudah di python 3.x
text = "hi , I'm text"
text.encode('utf-8')