ฉันใช้สิ่งนี้:
u = unicode(text, 'utf-8')
แต่ได้รับข้อผิดพลาดกับ Python 3 (หรือ ... บางทีฉันอาจลืมใส่บางอย่าง):
NameError: global name 'unicode' is not defined
ขอบคุณ.
ฉันใช้สิ่งนี้:
u = unicode(text, 'utf-8')
แต่ได้รับข้อผิดพลาดกับ Python 3 (หรือ ... บางทีฉันอาจลืมใส่บางอย่าง):
NameError: global name 'unicode' is not defined
ขอบคุณ.
คำตอบ:
สตริงตัวอักษรเป็น Unicode โดยค่าเริ่มต้นใน Python3
สมมติว่าtext
เป็นbytes
วัตถุเพียงใช้text.decode('utf-8')
unicode
ของ Python2 เทียบเท่ากับstr
ใน Python3 ดังนั้นคุณสามารถเขียน:
str(text, 'utf-8')
ถ้าคุณต้องการ
str
เป็น Unicode เช่น. มันถูก "ถอดรหัส" ดังนั้นจึงไม่มีเหตุผลที่จะเรียกdecode
มัน
str(text, 'utf-8')
ข้อความต้องเป็นไบนารีสตริง เช่นstr(b'this is a binary', 'utf-8')
มีอะไรใหม่ใน Python 3.0พูดว่า:
ข้อความทั้งหมดเป็น Unicode อย่างไรก็ตาม Unicode ที่เข้ารหัสจะแสดงเป็นข้อมูลไบนารี
หากคุณต้องการให้แน่ใจว่าคุณกำลังส่งออก utf-8 ต่อไปนี้เป็นตัวอย่างจากหน้านี้ในUnicode ใน 3.0 :
b'\x80abc'.decode("utf-8", "strict")
เพื่อเป็นการแก้ปัญหาฉันใช้สิ่งนี้:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
นี่คือรูปแบบที่เรียบง่าย:
unicode = str
เพราะมันจะไม่ล้มเหลวใน 2 หรือ 3
from six import u as unicode
สิ่งที่ฉันต้องการเพียงเพราะมันเป็นเอกสารในตัวเองมากกว่า (เนื่องจากหกเป็นเลเยอร์ที่เข้ากันได้ 2/3) มากกว่าunicode = str
นี่คือวิธีที่ฉันแก้ปัญหาในการแปลงตัวอักษรเช่น \ uFE0F, \ u000A ฯลฯ และอีโมจิที่เข้ารหัสด้วย 16 ไบต์
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❤️❤️ '
ในโปรแกรม Python 2 ที่ฉันใช้มาหลายปีมีบรรทัดนี้:
ocd[i].namn=unicode(a[:b], 'utf-8')
สิ่งนี้ใช้ไม่ได้ใน Python 3
อย่างไรก็ตามโปรแกรมนี้ใช้งานได้กับ:
ocd[i].namn=a[:b]
ฉันจำไม่ได้ว่าทำไมฉันถึงใส่ Unicode ไว้ในตอนแรก แต่ฉันคิดว่าเป็นเพราะชื่อสามารถมีตัวอักษรสวีเดนåäöÅÄÖ แต่ถึงแม้จะทำงานโดยไม่มี "Unicode"
วิธีที่ง่ายที่สุดในpython 3.x
text = "hi , I'm text"
text.encode('utf-8')