Я читаю файл с кодировкой utf-8. Когда я печатаю текст напрямую, все в порядке. Когда я печатаю текст из класса с помощью msg.__str__()
, он тоже работает. Но я действительно не знаю, как печатать его только с str(msg)
, потому что это всегда приведет к ошибке «кодек ascii не может кодировать символ u '\ xe4' в позиции 10: порядковый номер не в диапазоне (128)" если в тексте есть умляут.UnicodeEncodeError только с str (текст) в Python
Пример кода:
#!/usr/bin/env python
# encoding: utf-8
import codecs from TempClass import TempClass
file = codecs.open("person.txt", encoding="utf-8") message =
file.read() #I am Mr. Händler.
#works
print message
msg = TempClass(message)
#works
print msg.__str__()
#works
print msg.get_string()
#error
print str(msg)
А класс:
class TempClass(object):
def __init__(self, text):
self.text = text
def get_string(self):
return self.text
def __str__(self):
return self.text
Я пытался кодировать и декодировать текст несколькими способами, но ничего не работает для меня.
Помощь? :)
Edit: Я использую Python 2.7.9
Зачем вы хотите это сделать? 'print u '\ xe4' -> ä ' –
Зачем вам нужно использовать 'str (msg)'? 'msg' уже является строкой. Я также не могу воспроизвести проблему (Python 3.4.2). – TigerhawkT3
@ TigerhawkT3, OP использует python2, который очень отличается от python3, также тип unicode не str –