Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Matando (ou quase) Unicode(De|En)codeErrors (lightning talk)

on

  • 1,509 views

 

Statistics

Views

Total Views
1,509
Views on SlideShare
1,500
Embed Views
9

Actions

Likes
1
Downloads
12
Comments
2

4 Embeds 9

http://www.pythonologia.org 3
http://osantana.me 3
http://blog.triveos.com.br 2
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Não são intercambeáveis e não há conversão implícita, veja:
    >>> a = u'á'
    >>> b = 'é'
    >>> a + b
    Traceback (most recent call last):
    File '', line 1, in
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
    >>> c = 'i'
    >>> a + c
    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
    Are you sure you want to
    Your message goes here
    Processing…
  • 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.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Matando (ou quase) Unicode(De|En)codeErrors (lightning talk) Matando (ou quase) Unicode(De|En)codeErrors (lightning talk) Presentation Transcript

  • Matando (ou quase) Unicode(De|En)codeErrors No Python 2
  • Para acabar (ou quase) com os erros é necessário compreender o funcionamento
  • Unicode: catálogo com todos os símbolos criados pela humanidade
  • Unicode é uma abstração
  • código numérico símbolo
  • Computadores são reais e não abstratos, então...
  • Codificação / Encoding (UCS, UTF, ISO, ...)
  • "abstrato" "real" unicode.encode("utf-8") str str.decode("utf-8") unicode Internamente Python usa: UCS-2 ou 4
  • Unicode é complicado
  • Codificações são complicadas
  • Python + Unicode + Codificações = CHAOS
  • Adivinhar a codificação: impossível
  • Técnicas para descobrir • Tentativa e erro • BOM • Accept-Charset • <form accept-charset="???"> • Mais algumas outras... • Use mais de uma abordagem
  • Leitura Recomendada • http://www.python.org.br/wiki/ TudoSobrePythoneUnicode