Sistema de codificação de caracteres
Transcrição
Sistema de codificação de caracteres
Aula 5. 23/03/2015. Práticas de Desenvolvimento de Software Aula 5 - Sistemas de codificação de caracteres; Expressões regulares. Oferecimento Sistemas de codificação de caracteres (1) Sistemas de codificação de caracteres Sistemas de codificação de caracteres (2) Sistema de codificação de caracteres Código que mapeia cada caractere de um repertório em outros elementos, tais como padrões de bits, sequências de números, pulsos elétricos, etc. Sistemas de codificação de caracteres (3) Código Morse SOS Sistemas de codificação de caracteres (4) Codificação de caracteres “Hello World!” " …110100101010… ! Hello World! Sistemas de codificação de caracteres (5) ASCII American Standard Code for Information Interchange • Originado na década de 1960 • Representação de texto em computadores • Baseado no alfabeto americano • Codifica 128 caracteres em inteiros de 7 bits • 33 não imprimíveis (caracteres de controle) • 95 imprimíveis Sistemas de codificação de caracteres (6) Sistemas de codificação de caracteres (7) ASCII 0 ~ 127 7 bits 128 caracteres Especificação padrão 128 ~ 255 8 bits 128 caracteres adicionais Falta de padronização Sistemas de codificação de caracteres (8) ASCII # odarP siuL yb detaerC tcejorP nuoN eht morf “O jacaré é perigoso!” $ # Created by Luis Prado from the Noun Project “O jacar ג גperigoso!” Sistemas de codificação de caracteres (9) Unicode Unicode é um padrão para representação e manipulação de texto em qualquer sistema de escrita existente. Sistemas de codificação de caracteres (10) Unicode • Conjunto de caracteres que tenta englobar todos os sistemas de escrita do planeta • Repertório com mais de 110.000 caracteres • Caracteres não são mapeados em sequências binárias, mas sim em “code points” (conceito teórico) Caractere Code point (hex) A U+0041 Ԑ U+0510 ؽ U+063D Sistemas de codificação de caracteres (11) Três problemas Desafios para codificar o conjunto de caracteres do Unicode ASCII Espaço Manter compatibilidade com o ASCII, padrão já muito utilizado e estabelecido. 8 zeros Sistemas de codificação de caracteres (12) Três problemas Desafios para codificar o conjunto de caracteres do Unicode. ASCII Espaço 8 zeros Não desperdiçar espaço de armazenamento. O número de bits para codificação é muito alto e a maioria dos caracteres não é utilizada. Sistemas de codificação de caracteres (13) Três problemas Desafios para codificar o conjunto de caracteres do Unicode. ASCII Espaço 8 zeros Alguns sistemas interpretam sequências de 8 zeros consecutivos como final de string. Sistemas de codificação de caracteres (14) UTF-8 UCS Transformation Format — 8-bit Range de code points Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 - - - - - - - - - - - - … … … U+0000 U+007F 0xxxxxxx U+0080 U+07FF 110xxxxx 10xxxxxx U+0800 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx … … … … … U+4000000 U+7FFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Sistemas de codificação de caracteres (15) UTF-8 UCS Transformation Format — 8-bit 1 Byte: 01000001 (A) 2 Bytes: 11001001 10101001 Sistemas de codificação de caracteres (16) UTF-8 UCS Transformation Format — 8-bit 1 Byte: 01000001 (A) 2 Bytes: 11001001 10101001 01001 101001 Sistemas de codificação de caracteres (17) Exemplo em Ruby 2.2.0 utf8_resume = "Résumé" utf8_resume # => "Résumé" utf8_resume.encoding # => #<Encoding:UTF-8> latin1_resume = utf8_resume.encode("iso-8859-1") latin1_resume # => "R\xE9sum\xE9" latin1_resume.encoding # => #<Encoding:ISO-8859-1> utf8_resume.bytes # => [82, 195, 169, 115, 117, 109, 195, 169] latin1_resume.bytes # => [82, 233, 115, 117, 109, 233] utf8_resume == latin1_resume # => false Sistemas de codificação de caracteres (18) Exemplo em Ruby 2.2.0 resume # => "R\xE9sum\xE9" resume.encoding # => #<Encoding:UTF-8> resume.encode("utf-8") resume # => "R\xE9sum\xE9" resume.force_encoding("iso8859-1").encode("utf-8") resume # => # => "Résumé" % Strings = coleção de bytes + informação de encoding Expressões regulares (1) Expressões Regulares A.K.A. Regular Expressions, Regex, Regexp Expressões regulares (2) O que é expressão regular? É uma notação para descrever conjuntos de caracteres. Expressões regulares (3) \(\d{2}\) [0-9]{4,5}-[0-9]{4} Expressões regulares (4) Introdução teórica (será rápida!) alfabeto = { a, b } linguagem = { aa, ab, ba, bb } regex1 = aa|ab|ba|bb regex2 = a(a|b)|b(a|b) regex3 = (a|b)(a|b) Expressões regulares (5) Autômato finito determinístico a s1 a s2 b s3 b AFD para a expressão regular (a|b)(a|b) Expressões regulares (6) Autômato finito determinístico a s1 s2 b aa ab ba bb a s3 b Expressões regulares (7) Autômato finito determinístico a s1 s2 b aa ab ba bb a s3 b ○ Expressões regulares (8) Autômato finito determinístico a s1 s2 b aa ab ba bb a s3 b ○ ○ ○ ○ Expressões regulares (9) E por que conhecer Regex? ' Ferramenta muito poderosa que é frequentemente usada em projetos. Aplicada tanto a problemas simples quanto em situações complexas. Expressões regulares (10) Exemplos de aplicação • Processar um arquivo de log de um sistema buscando um determinado código de erro • Verificar se um email está em um formato válido • Contar quantas vezes “aluno” é sucedido por “inteligente” em um texto • Parsing de campos de endereços escritos de forma nãoestruturada Expressões regulares (11) Metacaracteres São caracteres que têm significados especiais e não são usados de forma literal. Servem para construir expressões regulares complexas. Expressões regulares (12) Metacaracteres comuns Met. Descrição Regex Match Não match . Match em qualquer caractere a.c “abc”, “a2c” “ac”, “abbc” [] Match em caracteres indicados dentro dos colchetes [abc] “a”, “b”, “c” “x”, “2”, “u” [^] Match em caracteres não indicados dentro dos colchetes [^abc] “x”, “2”, “u” “a”, “b”, “c” ^ Match no início de uma linha do texto ^abc “abcdef” “kabcdef” Expressões regulares (13) Metacaracteres comuns Met. Descrição Regex Match Não match $ Match no final de uma linha do texto abc$ “kabc” “abcdef” * Match do elemento precedente zero ou mais vezes ab*c “ac”, “abbbbbc” “abbbwc” ? Match do elemento precedente zero ou uma vez ab?c “ac”, “abc” “abbc”, “bc” {m,n} Match do elemento precedente entre m e n, inclusive a{1,2} “a”, “aa” “aaa”, “b” Expressões regulares (14) Metacaracteres comuns Met. Descrição Regex Match Não match + Match do elemento precedente uma ou mais vezes ab+c “abc”, “abbbbc” “ac”, “abwc” \d Match em caracteres numéricos \d{3} “123”, “092” “12b3”, “09p” \ Indica que o caractere seguinte não é um metacaractere a\.c “a.c” “abc”, “ac” () Captura o padrão entre parênteses a(.*)c “abc”, “a2*dc” “rbc”, “a2*d9” DE Expressões regulares (15) M Rubular é um editor de regex baseado em Ruby que permite testar expressões regulares de forma muito simples e rápida. http://rubular.com/ O Rubular DE Expressões regulares (16) M 09:55 - [política] Prefeito da Krakosia é eleito o melhor para economia 10:14 - [cotidiano] Cachorro salva dono de assalto 11:01 - [esporte] Seleção local de golfe se classifica para mundial 11:36 - [esporte] João da Silva Sauro é cortado da seleção de golfe 13:19 - [economia] Desemprego sobe para 12% no último mês 14:55 - [política] Lei do esporte é aprovada às 10:30 16:13 - [economia] Cotação do dólar sobe 5% em uma semana O Feed de notícias DE Expressões regulares (17) M 09:55 - [política] Prefeito da Krakosia é eleito o melhor para economia 10:14 - [cotidiano] Cachorro salva dono de assalto 11:01 - [esporte] Seleção local de golfe se classifica para mundial 11:36 - [esporte] João da Silva Sauro é cortado da seleção de golfe 13:19 - [economia] Desemprego sobe para 12% no último mês 14:55 - [política] Lei do esporte é aprovada às 10:30 16:13 - [economia] Cotação do dólar sobe 5% em uma semana ? Quais são as manchetes das notícias de economia? O Feed de notícias DE Expressões regulares (18) M O Feed de notícias 09:55 - [política] Prefeito da Krakosia é eleito o melhor para economia 10:14 - [cotidiano] Cachorro salva dono de assalto 11:01 - [esporte] Seleção local de golfe se classifica para mundial 11:36 - [esporte] João da Silva Sauro é cortado da seleção de golfe 13:19 - [economia] Desemprego sobe para 12% no último mês 14:55 - [política] Lei do esporte é aprovada às 10:30 16:13 - [economia] Cotação do dólar sobe 5% em uma semana ( \[economia\] (.*)$ MATCH SIMPLES MATCH + CAPTURA DE Expressões regulares (19) M 09:55 - [política] Prefeito da Krakosia é eleito o melhor para economia 10:14 - [cotidiano] Cachorro salva dono de assalto 11:01 - [esporte] Seleção local de golfe se classifica para mundial 11:36 - [esporte] João da Silva Sauro é cortado da seleção de golfe 13:19 - [economia] Desemprego sobe para 12% no último mês 14:55 - [política] Lei do esporte é aprovada às 10:30 16:13 - [economia] Cotação do dólar sobe 5% em uma semana ? Quais são os horários de publicação das notícias? O Feed de notícias DE Expressões regulares (20) M 09:55 - [política] Prefeito da Krakosia é eleito o melhor para economia 10:14 - [cotidiano] Cachorro salva dono de assalto 11:01 - [esporte] Seleção local de golfe se classifica para mundial 11:36 - [esporte] João da Silva Sauro é cortado da seleção de golfe 13:19 - [economia] Desemprego sobe para 12% no último mês 14:55 - [política] Lei do esporte é aprovada às 10:30 16:13 - [economia] Cotação do dólar sobe 5% em uma semana ? Quais são as manchetes de política entre 14:00 e 14:59? O Feed de notícias DE Expressões regulares (21) M O Feed de notícias 09:55 - [política] Prefeito da Krakosia é eleito o melhor para economia 10:14 - [cotidiano] Cachorro salva dono de assalto 11:01 - [esporte] Seleção local de golfe se classifica para mundial 11:36 - [esporte] João da Silva Sauro é cortado da seleção de golfe 13:19 - [economia] Desemprego sobe para 12% no último mês 14:55 - [política] Lei do esporte é aprovada às 10:30 16:13 - [economia] Cotação do dólar sobe 5% em uma semana ? Quais temas têm manchetes com um valor percentual? Fonte: https://xkcd.com/208/