เป็นไปได้ไหมที่จะพิมพ์ 'é' เป็น '%C3%A9' ใน Python

ฉันประสบปัญหาในการส่ง uri ที่มีอักขระ Unicode ไปที่ rdflib เพื่อเพิ่มลงใน Graph()

ตัวอย่างเช่น ฉันต้องการเรียกใช้:

from rdflib import Graph
g = Graph()
uri = 'http://dbpedia.org/resource/René_Auberjonois'
g.parse(uri)

แต่ฉันได้รับข้อผิดพลาดในการเข้ารหัส ASCII Codec ซึ่งพบได้บ่อยใน Python

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 17: ordinal not in range(128)

หาก uri ถูกส่งผ่านเป็น `http://dbpedia.org/resource/Ren%C3%A9_Auberjonois' คงจะไม่เป็นไร parser ใช้งานได้หากสตริงอยู่ในรูปแบบนั้น (ขออภัย ฉันไม่รู้ว่าจะเรียกสิ่งนี้ว่าอะไร ไม่ว่าจะเป็น 'raw', 'escaped', 'unescaped' หรืออย่างอื่น) .

ฉันจะทำอะไรได้บ้างกับ uri (มันไม่ได้ถูกตั้งค่าในลักษณะนี้ แต่ถูกตั้งค่าผ่านฟังก์ชันที่วนซ้ำรายการชื่อ) เพื่อให้ print uri จะให้ http://dbpedia.org/resource/Ren%C3%A9_Auberjonois

พื้นหลัง: เดิมทีฉันถามคำถามนี้ แต่เพิ่ม u ใน ด้านหน้าของสตริงไม่สามารถทำได้ด้วยวิธีการตั้งค่าสคริปต์ (ฉันไม่ได้ตั้งค่าแต่ละสตริงเช่น: s = 'René_Auberjonois') หรือไม่ได้ผลจริง ๆ ในตอนท้ายเมื่อฉันส่งผ่านไปยัง rdflib (เช่นยังคงได้รับข้อผิดพลาดในการเข้ารหัสเพราะมัน กำลังผ่านไป http://dbpedia.org/resource/René_Auberjonois)

นอกจากนี้ หากมีแหล่งข้อมูลที่ดีในการทำความเข้าใจปัญหาที่ฉันมีที่นี่ ก็คงจะดี ฉันสับสนกับการเข้ารหัสอักขระในขณะนี้


person roy    schedule 28.04.2014    source แหล่งที่มา
comment
เหตุใดคุณจึงไม่ใช้ตัวอักษร unicode   -  person Ignacio Vazquez-Abrams    schedule 28.04.2014
comment
เนื่องจากฉันไม่รอบรู้ในหัวข้อนี้ดีนัก และไม่แน่ใจว่าสิ่งนั้นจะเป็นประโยชน์ต่อฉันอย่างไร หรือเกี่ยวข้องกับอะไรกันแน่ (เช่น ฉันไม่ใช่มืออาชีพ)   -  person roy    schedule 28.04.2014
comment
แต่อย่างน้อยคุณก็อ่านคำตอบสำหรับคำถามอื่น ๆ ของคุณใช่ไหม?   -  person Ignacio Vazquez-Abrams    schedule 28.04.2014
comment
ใช่และฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ แต่ถึงแม้จะใช้คำแนะนำนั้น ฉันพบว่าฉันยังคงประสบปัญหาเดิมอยู่   -  person roy    schedule 28.04.2014


คำตอบ (1)


หากสิ่งที่คุณต้องการคือรูปแบบที่เข้ารหัสเป็นเปอร์เซ็นต์ คุณสามารถใช้ urllib:

>>> import urllib
>>> s='http://dbpedia.org/René_Auberjonois'
>>> urllib.quote(s)
'http%3A//dbpedia.org/Ren%C3%A9_Auberjonois'
>>> urllib.quote(s, safe=':')
'http:%2F%2Fdbpedia.org%2FRen%C3%A9_Auberjonois'
>>> urllib.quote(s, safe=':/')
'http://dbpedia.org/Ren%C3%A9_Auberjonois'
>>> 

ใช้พารามิเตอร์ safe เพื่อระบุอักขระที่ไม่ควรยกมา โดยมีค่าเริ่มต้นเป็น /

person devnull    schedule 28.04.2014