Como me tornei um empreendedor pyth... by Osvaldo Santana 2252 views
Apresentação Livro Linkedin by Pedro Caramez 3052 views
Não são intercambeáveis e não há conversão implícita, veja:
>>> a = u'á'
>>> b = 'é'
>>> c = 'i'
u'\xe1i'
>>> print a + b.decode('utf-8') # meu terminal usa utf-8
Talvez os únicos três problemas que existam sejam:
1. O caso onde eu fiz 'a+c' no exemplo acima não ter dado erro mesmo sendo possível concatenar as duas strings pelo fato da segunda não ter nenhum caracter especial.
2. O tipo unicode implementar o método .decode().
3. O tipo str implementar o método .encode() (poderia implementar um método .reencode(from_charset, to_charset)).
Mas nunca pensei em excesso sobre esse assunto para ter absoluta certeza do que estou falando :D
Um detalhe importante: o 'rolo' de Python com Unicode (Python2, pelo menos) é a quebra de uma própria regra do Python, que é não usar tipagem fraca, a la PHP ou Javascript. A maior fonte de erros inesperados no Python é causada por duplo encoding ou duplo decoding, o que não aconteceria se não houvesse conversão implícita.
1. Matando (ou quase) Unicode(De|En)codeErrors No Python 2
2. Para acabar (ou quase) com os erros é necessário compreender o funcionamento
3. Unicode: catálogo com todos os símbolos criados pela humanidade
4. Unicode é uma abstração
5. código numérico símbolo
6. Computadores são reais e não abstratos, então...
7. Codificação / Encoding (UCS, UTF, ISO, ...)
8. unicode.encode("utf-8") str str.decode("utf-8") unicode "abstrato" "real" Internamente Python usa: UCS-2 ou 4
9. Unicode é complicado
10. Codificações são complicadas
11. Python + Unicode + Codificações = CHAOS
12. Adivinhar a codificação: impossível
13. Técnicas para descobrir • Tentativa e erro • BOM • Accept-Charset • <form accept-charset="???"> • Mais algumas outras... • Use mais de uma abordagem