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/

Documentos relacionados