Cara membuat string unicode dengan python3


99

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.


17
Jika ada alasan bagus untuk meningkatkan ke python 3, itu adalah unicode secara default.
JBernardo

Jawaban:


137

String literal adalah unicode secara default di Python3.

Dengan asumsi itu textadalah sebuah bytesobjek, gunakan sajatext.decode('utf-8')

unicodePython2 setara dengan strdi Python3, jadi Anda juga bisa menulis:

str(text, 'utf-8')

jika kamu memilih.


58
TypeError: decoding str tidak didukung
Gank

9
@Gank, Dalam Python3 a stradalah unicode, yaitu. itu "diterjemahkan" sehingga tidak masuk akal untuk memanggil decodedi atasnya
John La Rooy

TypeError yang sama. Silakan ganti dengan str (txt), atau kode dari @magicrebirth di bawah
Simon

3
Sampel asli tidak jelas. Jadi di python3, jika ingin melakukannya str(text, 'utf-8'), teks harus berupa string biner. misalnyastr(b'this is a binary', 'utf-8')
killua8p

10

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")

1
inilah yang kami butuhkan untuk '\ x80abc'.decode ("utf-8", "strict") di Python 2, terima kasih
workplaylifecycle

9

Sebagai solusinya, saya telah menggunakan ini:

# Fix Python 2.x.
try:
    UNICODE_EXISTS = bool(type(unicode))
except NameError:
    unicode = lambda s: str(s)

12
Mengapa Anda menggunakan fungsi lambda? Metode ini disebut dengan cara yang sama dalam kasus apa pun. Ini adalah variasi sederhana: try: unicode = str; except: pass.
Nicolas Bouliane

1
Sepertinya Anda bisa melakukannya unicode = strkarena tidak akan gagal dalam 2 atau 3
Nickolai

Atau from six import u as unicodeyang saya lebih suka hanya karena ini lebih mendokumentasikan diri (karena enam adalah lapisan kompatibilitas 2/3) daripadaunicode = str
Nickolai

3

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❤️❤️ '

0

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".


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.