8 bits que expandem o ASCII: • iso-8859-1 / latin-1: Europa Ocidental (a gente! o/) • iso-8859-2 / latin-2: Europa Central • ... • iso-8859-11 : Tailandˆ es • ... • iso-8859-14 / latin-8 : Ga´ elico(s), Bret˜ ao etc. • ... 10
os caracteres (at´ e emojis!) • Vai de 0 a 4 294 967 296 (bem mais que 8 bits) • Bem mais que encoding! Ligaduras, combina¸ c˜ oes de diacr´ ıticos, ordem de leitura etc. 12
• ”e”, ”´ e”, ”¸ c”, ”˜ a” e ”æ” s˜ ao caracteres • Cada caracter tem um n´ umero associado chamado de code point • A tabela de code points ´ e ´ unica, mas as representa¸ c˜ oes bin´ arias s˜ ao diversas: • Normaliza¸ c˜ ao: ”´ e” vs ”e” + ”´ ” 13
• ”e”, ”´ e”, ”¸ c”, ”˜ a” e ”æ” s˜ ao caracteres • Cada caracter tem um n´ umero associado chamado de code point • A tabela de code points ´ e ´ unica, mas as representa¸ c˜ oes bin´ arias s˜ ao diversas: • Normaliza¸ c˜ ao: ”´ e” vs ”e” + ”´ ” • Unicode Transformation Formats 13
e Ken Thompson • UTF-8 usa de 1 a 4 bytes para representar um code point • Vantagens: Economiza bastante espa¸ co e ´ e compat´ ıvel com ascii • Desvantagem: ”Pulos” s˜ ao O(n) 16
encias de caracteres • u’literal unicode’ • str: tipo que representa sequˆ encias de bytes • ’literal str’ • Python 3: • str: tipo que representa sequˆ encias de caracteres • ’literal str’ 18
encias de caracteres • u’literal unicode’ • str: tipo que representa sequˆ encias de bytes • ’literal str’ • Python 3: • str: tipo que representa sequˆ encias de caracteres • ’literal str’ • bytes: tipo que representa sequˆ encias de bytes • b’literal str’ 18
umeros • F O R A T E M E R → 6 15 18 1 20 5 13 5 18 • decode / decodificar: transformar n´ umeros em caracteres • F O R A T E M E R ← 21 12 9 26 7 22 14 22 9 20
• Causa: • Vocˆ e est´ a usando Python 2 • Vocˆ e est´ a tentando escrever um objeto unicode • Arquivos s˜ ao sequencias de bytes • Ent˜ ao Python precisa fazer encode 26
• Causa: • Vocˆ e est´ a usando Python 2 • Vocˆ e est´ a tentando escrever um objeto unicode • Arquivos s˜ ao sequencias de bytes • Ent˜ ao Python precisa fazer encode • Vocˆ e n˜ ao disse nada, Python assumiu ascii 26
• Causa: • Vocˆ e est´ a usando Python 2 • Vocˆ e est´ a tentando escrever um objeto unicode • Arquivos s˜ ao sequencias de bytes • Ent˜ ao Python precisa fazer encode • Vocˆ e n˜ ao disse nada, Python assumiu ascii • Vide pt 1 26
• Causa: • Vocˆ e est´ a usando Python 2 • Vocˆ e est´ a tentando escrever um objeto unicode • Arquivos s˜ ao sequencias de bytes • Ent˜ ao Python precisa fazer encode • Vocˆ e n˜ ao disse nada, Python assumiu ascii • Vide pt 1 26
parte de outra familia que extende o ASCII • Windows-1252 ´ e quase igual ao latin-1 exceto por 32 caracteres • A galera n˜ ao sabe a diferen¸ ca e acha que s˜ ao a mesma coisa 29
parte de outra familia que extende o ASCII • Windows-1252 ´ e quase igual ao latin-1 exceto por 32 caracteres • A galera n˜ ao sabe a diferen¸ ca e acha que s˜ ao a mesma coisa • ”Solu¸ c˜ ao”: • HTML5 recomenda que ISO-8859-1 seja tratado como windows-1252 29
parte de outra familia que extende o ASCII • Windows-1252 ´ e quase igual ao latin-1 exceto por 32 caracteres • A galera n˜ ao sabe a diferen¸ ca e acha que s˜ ao a mesma coisa • ”Solu¸ c˜ ao”: • HTML5 recomenda que ISO-8859-1 seja tratado como windows-1252 • Trate do jeito certo em outras situa¸ c˜ oes 29
parte de outra familia que extende o ASCII • Windows-1252 ´ e quase igual ao latin-1 exceto por 32 caracteres • A galera n˜ ao sabe a diferen¸ ca e acha que s˜ ao a mesma coisa • ”Solu¸ c˜ ao”: • HTML5 recomenda que ISO-8859-1 seja tratado como windows-1252 • Trate do jeito certo em outras situa¸ c˜ oes • Boa sorte 29
• Use Python 3 • Na d´ uvida, use utf-8 • Decodifique assim que poss´ ıvel • Codifique s´ o quando necess´ ario • Seja consistente! (i.e. n˜ ao misture tipos de string) 30
• Use Python 3 • Na d´ uvida, use utf-8 • Decodifique assim que poss´ ıvel • Codifique s´ o quando necess´ ario • Seja consistente! (i.e. n˜ ao misture tipos de string) • Use Python 3 30
• Use Python 3 • Na d´ uvida, use utf-8 • Decodifique assim que poss´ ıvel • Codifique s´ o quando necess´ ario • Seja consistente! (i.e. n˜ ao misture tipos de string) • Use Python 3 30