2012/12/14 Maxwell Morais <
max.mor...@gmail.com>
> É justamente por que sua string também precisa ser codificada como utf-8
> antes de escrevê-la no arquivo.
>
> Portanto, adicione:
> mystring = u"Nome: %s"% nome.get()
> write(mystring.encode('utf-8'))
Esse código também está errado, veja:
>>> u'Nome: %s' % 'Álvaro'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
0: ordinal not in range(128)
O que acontece acima é que você está tentando colocar uma sequência de
bytes ('Álvaro', que é do tipo 'str') dentro de um objeto unicode
através do operador '%' (que existe tanto para 'str' quanto para
'unicode'). Na minha visão, o Python poderia ser mais explícito, nesse
caso. Para mim, o ideal seria ele levantar uma exceção do tipo
TypeError (não dá pra operar 'unicode' com 'str', pois isso pode
causar *muitos* erros).
Isso dá erro porque o Python tenta decodar o conjunto de bytes usando
o codec 'ascii' (que é o padrão) e, como 'Á' não está disponível na
tabela ASCII, ele gera essa exceção. O correto seria eu decodificar
utilizando um codec que possui esse símbolo (e mais: um codec que
representa esse símbolo com os mesmos bits que estão no código abaixo,
que no caso foi escrito usando UTF-8), como abaixo:
>>> u'Nome: %s' % 'Álvaro'.decode('utf-8')
u'Nome: \xc1lvaro'
Como o operador '%' está depreciado, o melhor seria usar o método format:
>>> u'Nome: {}'.format('Álvaro'.decode('utf-8'))
u'Nome: \xc1lvaro'
Eu dei uma palestra na PythonBrasil[8] sobre Unicode, os slides estão
disponíveis em:
http://turicas.info/slides/python-unicode
Em muito breve (próximos dias) abrirei um curso online sobre o
assunto[
http://www.pingmind.com/python-unicode/] (utilizando a
plataforma PyCursos/PingMind) e também postarei o vídeo de uma
palestra de 1h que falo sobre o assunto (na PythonBrasil[8] só tive
30min), daí publico os links aqui na lista.
[]s
--
Álvaro Justen "Turicas"
http://blog.justen.eng.br http://twitter.com/turicas
http://CursoDeArduino.com.br http://github.com/turicas
+55 21 9898-0141