ชอบใน:
u'Hello'
ฉันเดาว่ามันระบุว่า "Unicode" ถูกต้องหรือไม่?
ถ้าเป็นเช่นนั้นตั้งแต่เมื่อใด
ชอบใน:
u'Hello'
ฉันเดาว่ามันระบุว่า "Unicode" ถูกต้องหรือไม่?
ถ้าเป็นเช่นนั้นตั้งแต่เมื่อใด
คำตอบ:
คุณถูกต้องดู3.1.3 Unicode สตริง
มันเป็นไวยากรณ์ตั้งแต่ Python 2.0
Python 3 ทำให้ซ้ำซ้อนเนื่องจากชนิดสตริงเริ่มต้นคือ Unicode เวอร์ชัน 3.0 ถึง 3.2 จะลบออก แต่จะเพิ่มใหม่ใน 3.3+เพื่อให้เข้ากันได้กับ Python 2 เพื่อช่วยในการเปลี่ยน 2 ถึง 3
ur"string"
) นั้นใช้ได้ใน Python 2 แต่น่าเสียดายที่เป็นไวยากรณ์ที่ไม่ถูกต้องใน Python 3
U ในu'Some String'
หมายความว่าสายของคุณเป็นสายอักขระ Unicode
ถาม: ฉันเป็นคนที่น่ากลัวและรีบร้อนมากและฉันมาถึงที่นี่จาก Google Search ฉันกำลังพยายามเขียนข้อมูลนี้ไปยังไฟล์ฉันได้รับข้อผิดพลาดและฉันต้องการวิธีที่ง่ายที่สุดอาจมีข้อบกพร่อง
ตอบ: คุณควรอ่านค่าสัมบูรณ์ขั้นต่ำของ Joel นักพัฒนาซอฟต์แวร์ทุกคนอย่างแน่นอนต้องรู้อย่างแน่นอนเกี่ยวกับ Unicode และชุดอักขระ (ไม่มีข้อแก้ตัว!) เรียงตามชุดอักขระ
Q: sry ไม่มีรหัสเวลากรุณา
ดี. ลองหรือstr('Some String')
'Some String'.encode('ascii', 'ignore')
แต่คุณควรอ่านบางส่วนของคำตอบและการอภิปรายเกี่ยวกับการแปลงสายอักขระ Unicodeและนี้ที่ยอดเยี่ยมที่ยอดเยี่ยม, ไพรเมอร์ในการเข้ารหัสอักขระ
ฉันเดาว่ามันระบุว่า "Unicode" ถูกต้องหรือไม่?
ใช่.
ถ้าเป็นเช่นนั้นตั้งแต่เมื่อใด
Python 2.x
ใน Python 3.x สตริงใช้ Unicode ตามค่าเริ่มต้นและไม่จำเป็นต้องมีu
คำนำหน้า หมายเหตุ:ใน Python 3.0-3.2 คุณเป็นข้อผิดพลาดทางไวยากรณ์ ใน Python 3.3+ ถูกกฎหมายอีกครั้งเพื่อให้ง่ายต่อการเขียนแอปที่ใช้งานร่วมกันได้ 2/3
u
นำหน้า
six.text_type()
ทุกที่สำหรับคนที่ยังคงใช้จำนวน 3 คน (หวังว่า miniscule) [012] - อย่างน้อยข้อมูลก็อยู่ที่นั่นเพื่อให้คุณสามารถเลือก
ผมมาที่นี่เพราะผมมีตลกถ่านซินโดรมบนของrequests
เอาท์พุท ฉันคิดว่าresponse.text
จะให้สายอักขระที่ถอดรหัสได้อย่างถูกต้อง แต่ในผลลัพธ์ฉันพบว่ามีตัวละครสองตัวที่ตลกที่ควรจะมี umlauts เยอรมัน
กลายresponse.encoding
เป็นว่าว่างเปล่าอย่างใดและดังนั้นจึงresponse
ไม่ทราบวิธีการถอดรหัสเนื้อหาอย่างถูกต้องและถือว่าเป็น ASCII (ฉันเดา)
โซลูชันของฉันคือรับไบต์ดิบด้วย 'response.content' และใช้decode('utf_8')
กับมันด้วยตนเอง ผลลัพธ์คือschöne Umlaute
ถอดรหัสถูกต้อง
für
เทียบกับการถอดรหัสที่ไม่เหมาะสม
fĂźr
สตริงทั้งหมดที่มีขึ้นสำหรับมนุษย์ควรใช้ u ""
ฉันพบว่าความคิดต่อไปนี้ช่วยได้มากเมื่อจัดการกับสตริง Python: สตริงPython รายการทั้งหมดควรใช้u""
ไวยากรณ์ ""
ไวยากรณ์สำหรับอาร์เรย์ไบต์เท่านั้น
ก่อนที่จะเริ่มทุบตีฉันขออธิบาย โปรแกรมไพ ธ อนส่วนใหญ่เริ่มต้นด้วยการใช้""
สำหรับสตริง แต่แล้วพวกเขาจำเป็นต้องสนับสนุนเอกสารประกอบนอกอินเทอร์เน็ตดังนั้นพวกเขาจึงเริ่มใช้งาน"".decode
และในทันใดพวกเขาได้รับข้อยกเว้นทุกหนทุกแห่งเกี่ยวกับการถอดรหัสสิ่งนี้และสิ่งนั้น - ทั้งหมดเพราะการใช้""
สตริง ในกรณีนี้ Unicode ทำหน้าที่เหมือนไวรัสและจะสร้างความหายนะ
แต่ถ้าคุณทำตามกฎของฉันคุณจะไม่ติดเชื้อนี้ (เพราะคุณจะติดเชื้อแล้ว)
bash -c "echo Shouldn\\'t you use b\\\"...\\\" for byte arrays?"
u""
เพียงแค่หมายถึงว่าทุกสายหมายสำหรับมนุษย์ควรใช้
มันเป็น Unicode
เพียงแค่ใส่ตัวแปรระหว่าง str()
และมันจะทำงานได้ดี
แต่ในกรณีที่คุณมีสองรายการดังต่อไปนี้:
a = ['co32','co36']
b = [u'co32',u'co36']
หากคุณตรวจสอบset(a)==set(b)
มันจะมาเป็นเท็จ แต่ถ้าคุณทำดังนี้
b = str(b)
set(a)==set(b)
ตอนนี้ผลลัพธ์จะเป็นจริง
str()
หรือu'€'.encode()
) โดยไม่ต้องผ่านการเข้ารหัส หากสตริงมีไม่ใช่ ASCII ผู้ใช้จะได้รับ UnicodeEncodeException
b = str(b)
เพียงแค่ให้สตริงrepr()
b = "[u'co32', u'co36']"
ของรายการคือ จากนั้นset(a)==set(b) = False