Python3 ile unicode dizesi nasıl yapılır


102

Bunu kullandım:

u = unicode(text, 'utf-8')

Ancak Python 3 ile hata alıyorum (veya ... belki bir şey eklemeyi unutmuşumdur):

NameError: global name 'unicode' is not defined

Teşekkür ederim.


17
Python 3'e yükseltmek için harika bir neden varsa, bu varsayılan olarak unicode'dur.
JBernardo

Yanıtlar:


141

Değişmez dizeler Python3'te varsayılan olarak unicode'dur.

Bunun textbir bytesnesne olduğunu varsayarsak , sadecetext.decode('utf-8')

unicodeof Python2, Python3 ile eşdeğerdir str, dolayısıyla şunu da yazabilirsiniz:

str(text, 'utf-8')

Eğer tercih edersen.


61
TypeError: kod çözme
dizesi

10
@Gank, Python3'te a strunicode, yani. buna hiçbir mantıklı çağırmak için "deşifre" olan decodeÜzerinde
John La Rooy

Aynı Tip Hatası. Lütfen sadece str (txt) ile değiştirin veya aşağıdaki @magicrebirth koduyla değiştirin
Simon

3
Orijinal örnek net değil. Yani python3'te, eğer yapmak istiyorsanız str(text, 'utf-8'), metin bir string ikili olmalıdır. egstr(b'this is a binary', 'utf-8')
killua8p

10

Python 3.0'daki yenilikler şunları söylüyor:

Tüm metin Unicode'dur; ancak kodlanmış Unicode, ikili veri olarak temsil edilir

Utf-8 çıktısını aldığınızdan emin olmak istiyorsanız, 3.0'da unicode ile ilgili bu sayfadan bir örnek :

b'\x80abc'.decode("utf-8", "strict")

1
Python 2'de '\ x80abc'.decode ("utf-8", "sıkı") için tam da ihtiyacımız olan şey bu, teşekkürler
workplaylifecycle

9

Geçici çözüm olarak şunu kullanıyorum:

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

12
Neden bir lambda işlevi kullanıyorsunuz? Bu yöntemler her durumda aynı şekilde adlandırılır. Bu basit bir çeşididir: try: unicode = str; except: pass.
Nicolas Bouliane

1
unicode = str2 ya da 3'te başarısız olmayacağı için yapabileceğin gibi görünüyor
Nickolai

Ya from six import u as unicodeda daha çok kendi kendini belgelendirdiği için tercih ederim (çünkü altı, 2/3 uyumluluk katmanıdır)unicode = str
Nickolai

3

Sorunumu, \ uFE0F, \ u000A vb. Karakterleri dönüştürmek için bu şekilde çözdüm ve ayrıca 16 bayt ile kodlanmış emojiler.

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

Yıllardır kullandığım bir Python 2 programında şu satır vardı:

ocd[i].namn=unicode(a[:b], 'utf-8')

Bu Python 3'te işe yaramadı.

Ancak, programın şunlarla çalıştığı ortaya çıktı:

ocd[i].namn=a[:b]

İlk başta neden oraya unicode koyduğumu hatırlamıyorum, ama sanırım adı İsveç harfleri åäöÅÄÖ içerebildiği için. Ancak "unicode" olmadan da çalışırlar.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.