Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - טיפול במחרוזות UNICODE בפייתון

Anonymous - 28/12/2016 - 23:03
נושא ההודעה: טיפול במחרוזות UNICODE בפייתון
שלום
אני לומד פייתון (מנסה ללמוד לפחות )
יש לי קובץ טקסט בutf-8 המכיל מחרוזות בעברית
קראתי וניתחתי אותו לתוך רשימה של אובייקטים בפייתון כך:
קוד:

chomp=lambda s : s.strip("\r\n")
with codecs.open(cities_f,'r', 'utf-8') as in_f2:
    cities_lines = map(chomp, in_f2.readlines())
    cities_list  = map(lambda c: City(c[0-3],c[5:]),cities_lines)


כאשר אני מנסה להשתמש בformat:
קוד:

    def __str__(self):
          return "{}-->{}".format(self.code ,self.name)


למשל:
קוד:
str=str(cities_list)

אני מקבל את השגיאה:
קוד:
    return "{}-->{}".format(self.code ,self.name)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u05e0' in position 0: ordinal not in range(128)


אני מניח שאני צריך להמיר את המחרוזת "{}-->{}" לunicode.
אשמח לקבל הכוונה, וגם הפנייה להסבר קריא ונהיר לגבי זה, התעוד של python הרבה יותר ארוך ממה שאני רוצה לקרוא בשלב הזה של הלימוד של השפה. Very Happy
mksoft - 29/12/2016 - 11:59
נושא ההודעה:
לא ציינת את גרסת הפייתון שאתה משתמש בה (אחד השינויים הגדולים בפייתון 3 הוא הטיפול ביוניקוד)

בד"כ יש לציין שהמחרוזת היא יוניקוד ע"י prefix של u למחרוזת (זה פייתון 2):

קוד:
u"{}-->{}"


נ.ב.

__str__ בפייתון 2 אמורה להחזיר string
Anonymous - 29/12/2016 - 17:46
נושא ההודעה:
תודה!
אכן מדובר על python2
אם לא נהוג להשתמש ב__str__, במה כדאי להשתמש? gsh; לייצר מתודה בשם utf_8? (מה מקובל לעשות)
mksoft - 31/12/2016 - 20:57
נושא ההודעה:
יש את __unicode__.
כל הזמנים הם GMT + 2 שעות