SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o




                                   Unicode no mundo real
                              Normaliza¸˜o do conte´do na WEB
                                       ca          u


                                              Cl´udio Valente
                                                a

                                                      SAPO


                                      13 de Novembro de 2007
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Conte´dos
     u
           Introdu¸˜o
                  ca
      1

           Encodings mais comuns
      2
             Rela¸˜es
                 co
           Unicode
      3

           Exemplos de codifica¸˜es
                              co
      4

           Utiliza¸˜o pr´tica
                  ca    a
      5
             Problemas
           C´digo exemplificativo
            o
      6
             Conven¸˜es
                    co
             Encoding amb´ ıguo em pedidos
             V´rios encodings no mesmo documento
              a
           Conclus˜es
                  o
      7
             Objec¸˜es ao Unicode
                  co
             Resumo
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Conceitos Fundamentais




             Humanos comunicam com s´
                                    ımbolos (letras e ideogr´ficos)
                                                            a
             Computadores n˜o tˆm a no¸˜o de s´
                           ae         ca      ımbolo, apenas n´meros
                                                              u
             Para processar texto num computador ´ necess´rio
                                                 e       a
             transformar caracteres em n´meros
                                        u
             Um encoding consiste na atribui¸˜o de um n´mero a cada
                                            ca         u
             caracter pertencente a um conjunto
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Conceitos Fundamentais




             Humanos comunicam com s´
                                    ımbolos (letras e ideogr´ficos)
                                                            a
             Computadores n˜o tˆm a no¸˜o de s´
                           ae         ca      ımbolo, apenas n´meros
                                                              u
             Para processar texto num computador ´ necess´rio
                                                 e       a
             transformar caracteres em n´meros
                                        u
             Um encoding consiste na atribui¸˜o de um n´mero a cada
                                            ca         u
             caracter pertencente a um conjunto
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



ASCII



      O encoding mais conhecido e usado na pr´tica ´ o ASCII
                                             a     e
      (American Standard Code for Information Interchange)


             Caracteres n˜o acentuados da Europa Ocidental e do Norte
                         a
             Associa a cada caracter um n´mero entre 0 e 127
                                         u
             Cada caracter ASCII pode ser representado por um byte
             Na realidade apenas s˜o necess´rios 7 bits
                                  a        a
             Exemplo, o caracter A ´ representado pelo n´mero
                                   e                    u
             4116 = 6510 = 010000012
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



ASCII



      O encoding mais conhecido e usado na pr´tica ´ o ASCII
                                             a     e
      (American Standard Code for Information Interchange)


             Caracteres n˜o acentuados da Europa Ocidental e do Norte
                         a
             Associa a cada caracter um n´mero entre 0 e 127
                                         u
             Cada caracter ASCII pode ser representado por um byte
             Na realidade apenas s˜o necess´rios 7 bits
                                  a        a
             Exemplo, o caracter A ´ representado pelo n´mero
                                   e                    u
             4116 = 6510 = 010000012
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Encodings utilizados em Portuguˆs
                               e




             L´
              ıngua Portuguesa utiliza caracteres acentuados
             ASCII ´ insuficiente
                   e
             Os encodings mais utilizados em Portuguˆs s˜o:
                                                    ea
                     ISO-8859-1 (latin-1)
                     ISO-8859-15
                     Windows-1252
                     UTF-8
                     UTF-16
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Encodings utilizados em Portuguˆs
                               e




             L´
              ıngua Portuguesa utiliza caracteres acentuados
             ASCII ´ insuficiente
                   e
             Os encodings mais utilizados em Portuguˆs s˜o:
                                                    ea
                     ISO-8859-1 (latin-1)
                     ISO-8859-15
                     Windows-1252
                     UTF-8
                     UTF-16
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Rela¸˜es entre Encodings
    co




           ASCII
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Rela¸˜es entre Encodings
    co



                        `´˜¸
                        aaac
           ASCII                    ISO-8859-1




             Extens˜o m´
                     a ınima com caracteres acentuados das l´
                                                            ınguas
             latinas
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Rela¸˜es entre Encodings
    co
                                                       ISO-8859-15

                                                  e

                        `´˜¸
                        aaac
           ASCII                    ISO-8859-1
                                                       e


                                                      Windows-1252
                 ımbolo e n˜o faz parte do latin-1 e para o incluir foram
             O s´            a
             criadas v´rias extens˜es incompat´
                      a           o            ıveis
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Rela¸˜es entre Encodings
    co
                                                       ISO-8859-15

                                                  e

                                                      tudo(?)
                        `´˜¸
                        aaac
           ASCII                    ISO-8859-1                     Unicode
                                                                  UTF-(8-16-32)

                                                       e


                                                      Windows-1252
             O Unicode ´ suposto conter todos os caracteres considerados
                        e
             em l´
                 ınguas usadas actualmente bem como muitas j´ mortas.
                                                              a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



O que ´ o Unicode
      e




             Representa conte´do escrito em (quase) qualquer sistema
                             u
             humano que exista
             A cada caracter (grifo) associa um valor num´rico
                                                         e
             Define formas de processar dados tais como:
                     Classes de caracteres (alfa-num´ricos, pontua¸˜o, s´
                                                    e             ca ımbolos)
                     Compara¸˜es entre caracteres (ordena¸˜o alfab´tica)
                              co                            ca      e
                     Direccionalidade do texto
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



O que ´ o Unicode
      e




             Representa conte´do escrito em (quase) qualquer sistema
                             u
             humano que exista
             A cada caracter (grifo) associa um valor num´rico
                                                         e
             Define formas de processar dados tais como:
                     Classes de caracteres (alfa-num´ricos, pontua¸˜o, s´
                                                    e             ca ımbolos)
                     Compara¸˜es entre caracteres (ordena¸˜o alfab´tica)
                              co                            ca      e
                     Direccionalidade do texto
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Caracter´
        ısticas t´cnicas do Unicode
                 e


             Define aproximadamente 100 000 caracteres
             ´
             E uma extens˜o do latin-1.
                         a
             Todos os caracteres portugueses tˆm a mesma representa¸˜o
                                              e                    ca
             em unicode
             N˜o ´ poss´ continuar a representar cada caracter por um
               ae       ıvel
             byte
             ´
             E necess´rio fazer corresponder caracteres unicode a uma
                     a
             sequˆncia de bytes
                  e
                     UTF-32
                     UTF-16
                     UTF-8
                     UTF-7
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Caracter´
        ısticas t´cnicas do Unicode
                 e


             Define aproximadamente 100 000 caracteres
             ´
             E uma extens˜o do latin-1.
                         a
             Todos os caracteres portugueses tˆm a mesma representa¸˜o
                                              e                    ca
             em unicode
             N˜o ´ poss´ continuar a representar cada caracter por um
               ae       ıvel
             byte
             ´
             E necess´rio fazer corresponder caracteres unicode a uma
                     a
             sequˆncia de bytes
                  e
                     UTF-32
                     UTF-16
                     UTF-8
                     UTF-7
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Caracter´
        ısticas t´cnicas do Unicode
                 e


             Define aproximadamente 100 000 caracteres
             ´
             E uma extens˜o do latin-1.
                         a
             Todos os caracteres portugueses tˆm a mesma representa¸˜o
                                              e                    ca
             em unicode
             N˜o ´ poss´ continuar a representar cada caracter por um
               ae       ıvel
             byte
             ´
             E necess´rio fazer corresponder caracteres unicode a uma
                     a
             sequˆncia de bytes
                  e
                     UTF-32
                     UTF-16
                     UTF-8
                     UTF-7
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



UTF-8


             UTF = Unicode Transformation Format
             Faz corresponder a uma sequˆncia de caracteres unicode uma
                                        e
             sequˆncia de bytes
                 e
             Vantagens
                     Conte´do ASCII fica inalterado
                           u
                     Independente de ordena¸˜o de bytes (little-endian vs
                                            ca
                     big-endian)
                     Codifica todos os caracteres Unicode
             Desvantagens
                     Podem ser necess´rios v´rios bytes por caracter
                                      a     a
                     N˜o ´ 7bit safe
                      ae
                     O acesso aleat´rio a um caracter n˜o ´ poss´
                                   o                   ae        ıvel
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



UTF-8


             UTF = Unicode Transformation Format
             Faz corresponder a uma sequˆncia de caracteres unicode uma
                                        e
             sequˆncia de bytes
                 e
             Vantagens
                     Conte´do ASCII fica inalterado
                           u
                     Independente de ordena¸˜o de bytes (little-endian vs
                                            ca
                     big-endian)
                     Codifica todos os caracteres Unicode
             Desvantagens
                     Podem ser necess´rios v´rios bytes por caracter
                                      a     a
                     N˜o ´ 7bit safe
                      ae
                     O acesso aleat´rio a um caracter n˜o ´ poss´
                                   o                   ae        ıvel
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



UTF-8


             UTF = Unicode Transformation Format
             Faz corresponder a uma sequˆncia de caracteres unicode uma
                                        e
             sequˆncia de bytes
                 e
             Vantagens
                     Conte´do ASCII fica inalterado
                           u
                     Independente de ordena¸˜o de bytes (little-endian vs
                                            ca
                     big-endian)
                     Codifica todos os caracteres Unicode
             Desvantagens
                     Podem ser necess´rios v´rios bytes por caracter
                                      a     a
                     N˜o ´ 7bit safe
                      ae
                     O acesso aleat´rio a um caracter n˜o ´ poss´
                                   o                   ae        ıvel
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
                         ıticos e e
alfabeto latino com diacr´



                                                                                    e
                                                   ˜
                                      A            A                C
                                                                    ¸
           ASCII                      A            N.D.             N.D.            N.D.
           ISO-8859-1                 A            [C3]             [C7]            N.D.
           ISO-8859-15                A            [C3]             [C7]            [A4]
           Windows-1252               A            [C3]             [C7]            [80]
           UTF-8                      A            [C3][83]         [C3][87]        [E2][82][AC]
           UTF-16LE                   A[00]        [C3][00]         [C7][00]        [AC][20]
           UTF-7                      A            +AMM-            +AMc-           +IKw-
           Unicode                    U+41         U+C3             U+C7            U+20AC

             ASCII n˜o suporta acentos nem e
                    a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
                         ıticos e e
alfabeto latino com diacr´



                                                                                    e
                                                   ˜
                                      A            A                C
                                                                    ¸
           ASCII                      A            N.D.             N.D.            N.D.
           ISO-8859-1                 A            [C3]             [C7]            N.D.
           ISO-8859-15                A            [C3]             [C7]            [A4]
           Windows-1252               A            [C3]             [C7]            [80]
           UTF-8                      A            [C3][83]         [C3][87]        [E2][82][AC]
           UTF-16LE                   A[00]        [C3][00]         [C7][00]        [AC][20]
           UTF-7                      A            +AMM-            +AMc-           +IKw-
           Unicode                    U+41         U+C3             U+C7            U+20AC

             ISO-8859-1 suporta acentos, mas n˜o o e
                                              a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
                         ıticos e e
alfabeto latino com diacr´



                                                                                    e
                                                   ˜
                                      A            A                C
                                                                    ¸
           ASCII                      A            N.D.             N.D.            N.D.
           ISO-8859-1                 A            [C3]             [C7]            N.D.
           ISO-8859-15                A            [C3]             [C7]            [A4]
           Windows-1252               A            [C3]             [C7]            [80]
           UTF-8                      A            [C3][83]         [C3][87]        [E2][82][AC]
           UTF-16LE                   A[00]        [C3][00]         [C7][00]        [AC][20]
           UTF-7                      A            +AMM-            +AMc-           +IKw-
           Unicode                    U+41         U+C3             U+C7            U+20AC

             ISO-8859-1 suporta acentos, mas n˜o o e
                                              a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
                         ıticos e e
alfabeto latino com diacr´



                                                                                    e
                                                   ˜
                                      A            A                C
                                                                    ¸
           ASCII                      A            N.D.             N.D.            N.D.
           ISO-8859-1                 A            [C3]             [C7]            N.D.
           ISO-8859-15                A            [C3]             [C7]            [A4]
           Windows-1252               A            [C3]             [C7]            [80]
           UTF-8                      A            [C3][83]         [C3][87]        [E2][82][AC]
           UTF-16LE                   A[00]        [C3][00]         [C7][00]        [AC][20]
           UTF-7                      A            +AMM-            +AMc-           +IKw-
           Unicode                    U+41         U+C3             U+C7            U+20AC

             ISO-8859-15 e Windows-1252 suportam e de forma
             incompat´
                     ıvel
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
                         ıticos e e
alfabeto latino com diacr´



                                                                                    e
                                                   ˜
                                      A            A                C
                                                                    ¸
           ASCII                      A            N.D.             N.D.            N.D.
           ISO-8859-1                 A            [C3]             [C7]            N.D.
           ISO-8859-15                A            [C3]             [C7]            [A4]
           Windows-1252               A            [C3]             [C7]            [80]
           UTF-8                      A            [C3][83]         [C3][87]        [E2][82][AC]
           UTF-16LE                   A[00]        [C3][00]         [C7][00]        [AC][20]
           UTF-7                      A            +AMM-            +AMc-           +IKw-
           Unicode                    U+41         U+C3             U+C7            U+20AC

             O Unicode ´ extens˜o do ISO-8859-1
                       e       a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
                         ıticos e e
alfabeto latino com diacr´



                                                                                    e
                                                   ˜
                                      A            A                C
                                                                    ¸
           ASCII                      A            N.D.             N.D.            N.D.
           ISO-8859-1                 A            [C3]             [C7]            N.D.
           ISO-8859-15                A            [C3]             [C7]            [A4]
           Windows-1252               A            [C3]             [C7]            [80]
           UTF-8                      A            [C3][83]         [C3][87]        [E2][82][AC]
           UTF-16LE                   A[00]        [C3][00]         [C7][00]        [AC][20]
           UTF-7                      A            +AMM-            +AMc-           +IKw-
           Unicode                    U+41         U+C3             U+C7            U+20AC

             UTF-8 necessita de um n´mero vari´vel de bytes
                                    u         a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
                         ıticos e e
alfabeto latino com diacr´



                                                                                    e
                                                   ˜
                                      A            A                C
                                                                    ¸
           ASCII                      A            N.D.             N.D.            N.D.
           ISO-8859-1                 A            [C3]             [C7]            N.D.
           ISO-8859-15                A            [C3]             [C7]            [A4]
           Windows-1252               A            [C3]             [C7]            [80]
           UTF-8                      A            [C3][83]         [C3][87]        [E2][82][AC]
           UTF-16LE                   A[00]        [C3][00]         [C7][00]        [AC][20]
           UTF-7                      A            +AMM-            +AMc-           +IKw-
           Unicode                    U+41         U+C3             U+C7            U+20AC

             UTF-16 e UTF-32 podem ser Little Endian ou Big Endian
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
s´
 ımbolos comuns




                                   1
                                                    œ               “                     ...
                                   2
        ASCII                     N.D.              N.D.            N.D.                  N.D.
        ISO-8859-1                [BD]              N.D.            N.D.                  N.D.
        ISO-8859-15               N.D.              [BD]            N.D.                  N.D.
        Windows-1252              [BD]              [9C]            [93]                  [85]
        UTF-8                     [C2][BD]          [C5][93]        [E2][80][9C]          [E2][80][A6]
        UTF-16LE                  [BD][00]          S[01]           [1C][20]              [26][20]
        UTF-7                     +AL0-             +AVM-           +IBw-                 +ICY-
        Unicode                   U+BD              U+153           U+201C                U+2026

             ISO-8859-15 n˜o ´ estritamente uma extens˜o de ISO-8859-1
                          ae                          a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
s´
 ımbolos comuns




                                   1
                                                    œ               “                     ...
                                   2
        ASCII                     N.D.              N.D.            N.D.                  N.D.
        ISO-8859-1                [BD]              N.D.            N.D.                  N.D.
        ISO-8859-15               N.D.              [BD]            N.D.                  N.D.
        Windows-1252              [BD]              [9C]            [93]                  [85]
        UTF-8                     [C2][BD]          [C5][93]        [E2][80][9C]          [E2][80][A6]
        UTF-16LE                  [BD][00]          S[01]           [1C][20]              [26][20]
        UTF-7                     +AL0-             +AVM-           +IBw-                 +ICY-
        Unicode                   U+BD              U+153           U+201C                U+2026

             ”smart quotes”e reticˆncias definidas no Windows-1252 mas
                                  e
             n˜o no ISO-8859-1(5)
              a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Exemplos de codifica¸˜es
                   co
s´
 ımbolos comuns




                                   1
                                                    œ               “                     ...
                                   2
        ASCII                     N.D.              N.D.            N.D.                  N.D.
        ISO-8859-1                [BD]              N.D.            N.D.                  N.D.
        ISO-8859-15               N.D.              [BD]            N.D.                  N.D.
        Windows-1252              [BD]              [9C]            [93]                  [85]
        UTF-8                     [C2][BD]          [C5][93]        [E2][80][9C]          [E2][80][A6]
        UTF-16LE                  [BD][00]          S[01]           [1C][20]              [26][20]
        UTF-7                     +AL0-             +AVM-           +IBw-                 +ICY-
        Unicode                   U+BD              U+153           U+201C                U+2026

             Unicode codifica todos os caracteres (para efeitos pr´ticos)
                                                                 a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



HTML

             Identificar o conte´do da p´gina como estando codificado em
                               u       a
             UTF-8 nos cabe¸alhos de HTTP.
                             c
             Content-Type: text/html; charset=utf-8
             Identificar no documento.
             <head>
             <meta http-equiv=quot;content-typequot; content=quot;text/html;
             charset=utf-8quot; />
             </head>
             Forms.
             O encoding deve ser especificado sendo o da p´gina por
                                                         a
             omiss˜o
                  a
             <form accept-charset=quot;UTF-8quot;>
             ...
             </form>
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



HTML

             Identificar o conte´do da p´gina como estando codificado em
                               u       a
             UTF-8 nos cabe¸alhos de HTTP.
                             c
             Content-Type: text/html; charset=utf-8
             Identificar no documento.
             <head>
             <meta http-equiv=quot;content-typequot; content=quot;text/html;
             charset=utf-8quot; />
             </head>
             Forms.
             O encoding deve ser especificado sendo o da p´gina por
                                                         a
             omiss˜o
                  a
             <form accept-charset=quot;UTF-8quot;>
             ...
             </form>
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



HTML

             Identificar o conte´do da p´gina como estando codificado em
                               u       a
             UTF-8 nos cabe¸alhos de HTTP.
                             c
             Content-Type: text/html; charset=utf-8
             Identificar no documento.
             <head>
             <meta http-equiv=quot;content-typequot; content=quot;text/html;
             charset=utf-8quot; />
             </head>
             Forms.
             O encoding deve ser especificado sendo o da p´gina por
                                                         a
             omiss˜o
                  a
             <form accept-charset=quot;UTF-8quot;>
             ...
             </form>
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Parˆmetros em Unicode
   a


      Quando um pedido GET ou POST ´ efectuado, os parˆmetros
                                         e                  a
      devem ser transformados (uri escape). Infelizmente o conte´do
                                                                u
      associado aos bytes n˜o ´ transmitido no pedido obrigando a:
                           ae
             For¸ar um determinado encoding (parˆmetro accept-charset
                c                               a
             no form)
             Utilizar argumentos heur´
                                     ısticos
                     Assumir que est´ em UTF-8
                                    a
                     Caso n˜o seja um conjunto de caracteres v´lido assumir latin-1
                           a                                  a
                     ou melhor Windows-1252
             Come¸a a ser comum enviar caracteres fora do ASCII como
                  c
             %uXXXX onde os quatro X representam o c´digo unicode em
                                                     o
             hexadecimal
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Parˆmetros em Unicode
   a


      Quando um pedido GET ou POST ´ efectuado, os parˆmetros
                                         e                  a
      devem ser transformados (uri escape). Infelizmente o conte´do
                                                                u
      associado aos bytes n˜o ´ transmitido no pedido obrigando a:
                           ae
             For¸ar um determinado encoding (parˆmetro accept-charset
                c                               a
             no form)
             Utilizar argumentos heur´
                                     ısticos
                     Assumir que est´ em UTF-8
                                    a
                     Caso n˜o seja um conjunto de caracteres v´lido assumir latin-1
                           a                                  a
                     ou melhor Windows-1252
             Come¸a a ser comum enviar caracteres fora do ASCII como
                  c
             %uXXXX onde os quatro X representam o c´digo unicode em
                                                     o
             hexadecimal
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Parˆmetros em Unicode
   a


      Quando um pedido GET ou POST ´ efectuado, os parˆmetros
                                         e                  a
      devem ser transformados (uri escape). Infelizmente o conte´do
                                                                u
      associado aos bytes n˜o ´ transmitido no pedido obrigando a:
                           ae
             For¸ar um determinado encoding (parˆmetro accept-charset
                c                               a
             no form)
             Utilizar argumentos heur´
                                     ısticos
                     Assumir que est´ em UTF-8
                                    a
                     Caso n˜o seja um conjunto de caracteres v´lido assumir latin-1
                           a                                  a
                     ou melhor Windows-1252
             Come¸a a ser comum enviar caracteres fora do ASCII como
                  c
             %uXXXX onde os quatro X representam o c´digo unicode em
                                                     o
             hexadecimal
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Erros comuns



             P´ginas sem qualquer informa¸˜o de encoding
              a                          ca
             Conte´do latin-1 misturado com UTF-8
                  u
             GET ’http://some.domain.pt/’|
             iconv -f utf-8 -t utf-8 >/dev/null
             iconv: illegal input sequence at position 48123
             Conte´do UTF-8 em p´ginas latin-1. P´gina que se identifica
                  u                 a            a
             como estando em latin-1 mas que cont´m por exemplo
                                                 e
               ˜
             ClA¡udio (deveria ser Cl´udio).
                                     a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Erros comuns



             P´ginas sem qualquer informa¸˜o de encoding
              a                          ca
             Conte´do latin-1 misturado com UTF-8
                  u
             GET ’http://some.domain.pt/’|
             iconv -f utf-8 -t utf-8 >/dev/null
             iconv: illegal input sequence at position 48123
             Conte´do UTF-8 em p´ginas latin-1. P´gina que se identifica
                  u                 a            a
             como estando em latin-1 mas que cont´m por exemplo
                                                 e
               ˜
             ClA¡udio (deveria ser Cl´udio).
                                     a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Erros comuns



             P´ginas sem qualquer informa¸˜o de encoding
              a                          ca
             Conte´do latin-1 misturado com UTF-8
                  u
             GET ’http://some.domain.pt/’|
             iconv -f utf-8 -t utf-8 >/dev/null
             iconv: illegal input sequence at position 48123
             Conte´do UTF-8 em p´ginas latin-1. P´gina que se identifica
                  u                 a            a
             como estando em latin-1 mas que cont´m por exemplo
                                                 e
               ˜
             ClA¡udio (deveria ser Cl´udio).
                                     a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



C´digo m´
 o      ınimo
      Uma string usual ´ apenas um conjunto de bytes
                       e
      > s= ’ C l  x e 1 u d i o ’
      Para interpretarmos como caracteres temos de especificar o
      encoding
      > u1 = u n i c o d e ( ’ C l  x e 1 u d i o ’ , ’ l a t i n −1 ’ )
      Mas podemos fazer de forma equivalente
      > u2 = u n i c o d e ( ’ C l  xc3  x a 1 u d i o ’ , ’ u t f −8 ’ )
      Ou dizer logo que se trata duma string unicode
      > u3 = u ’ C l  u 0 0 e 1 u d i o ’
      u1, u2 e u3 representam a mesma sequˆncia de grifos.
                                          e
      > p r i n t u1==u2 and u2==u3
      True
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



C´digo m´
 o      ınimo
      Uma string usual ´ apenas um conjunto de bytes
                       e
      > s= ’ C l  x e 1 u d i o ’
      Para interpretarmos como caracteres temos de especificar o
      encoding
      > u1 = u n i c o d e ( ’ C l  x e 1 u d i o ’ , ’ l a t i n −1 ’ )
      Mas podemos fazer de forma equivalente
      > u2 = u n i c o d e ( ’ C l  xc3  x a 1 u d i o ’ , ’ u t f −8 ’ )
      Ou dizer logo que se trata duma string unicode
      > u3 = u ’ C l  u 0 0 e 1 u d i o ’
      u1, u2 e u3 representam a mesma sequˆncia de grifos.
                                          e
      > p r i n t u1==u2 and u2==u3
      True
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



C´digo m´
 o      ınimo
      Uma string usual ´ apenas um conjunto de bytes
                       e
      > s= ’ C l  x e 1 u d i o ’
      Para interpretarmos como caracteres temos de especificar o
      encoding
      > u1 = u n i c o d e ( ’ C l  x e 1 u d i o ’ , ’ l a t i n −1 ’ )
      Mas podemos fazer de forma equivalente
      > u2 = u n i c o d e ( ’ C l  xc3  x a 1 u d i o ’ , ’ u t f −8 ’ )
      Ou dizer logo que se trata duma string unicode
      > u3 = u ’ C l  u 0 0 e 1 u d i o ’
      u1, u2 e u3 representam a mesma sequˆncia de grifos.
                                          e
      > p r i n t u1==u2 and u2==u3
      True
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



C´digo m´
 o      ınimo
      Uma string usual ´ apenas um conjunto de bytes
                       e
      > s= ’ C l  x e 1 u d i o ’
      Para interpretarmos como caracteres temos de especificar o
      encoding
      > u1 = u n i c o d e ( ’ C l  x e 1 u d i o ’ , ’ l a t i n −1 ’ )
      Mas podemos fazer de forma equivalente
      > u2 = u n i c o d e ( ’ C l  xc3  x a 1 u d i o ’ , ’ u t f −8 ’ )
      Ou dizer logo que se trata duma string unicode
      > u3 = u ’ C l  u 0 0 e 1 u d i o ’
      u1, u2 e u3 representam a mesma sequˆncia de grifos.
                                          e
      > p r i n t u1==u2 and u2==u3
      True
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Argumentos em encoding amb´
                          ıguo



      Supor que ’nome’ cont´m o valor de um argumento de um pedido
                             e
      GET depois de url decoded. S´ sabemos uma sequˆncia de bytes
                                    o                    e
      mas o utilizador realmente pretendeu introduzir o nome ’Cl´udio’.
                                                                a
             http://domain.pt/?q=Cl%E1udio
             http://domain.pt/?q=Cl%C3%A1udio

      > nome1 = ’ C l  x e 1 u d i o ’
      > nome2 = ’ C l  xc3  x a 1 u d i o ’
      Como detectar heuristicamente o que o utilizador pretende?
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Argumentos em encoding amb´
                          ıguo



      Supor que ’nome’ cont´m o valor de um argumento de um pedido
                             e
      GET depois de url decoded. S´ sabemos uma sequˆncia de bytes
                                    o                    e
      mas o utilizador realmente pretendeu introduzir o nome ’Cl´udio’.
                                                                a
             http://domain.pt/?q=Cl%E1udio
             http://domain.pt/?q=Cl%C3%A1udio

      > nome1 = ’ C l  x e 1 u d i o ’
      > nome2 = ’ C l  xc3  x a 1 u d i o ’
      Como detectar heuristicamente o que o utilizador pretende?
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



”Resolu¸˜o”
       ca
      Definir a fun¸˜o:
                  ca
       def c l e a n a r g s ( s ) :
        try :
          r e t u r n u n i c o d e ( s , ’ u t f −8 ’ )
        except U n i c o d e D e c o d e E r r o r :
          r e t u r n u n i c o d e ( s , ’ windows −1252 ’ )
      O resultado destas fun¸˜o em ambas alternativas tem como
                            ca
      resultado uma string unicode que representa realmente o nome
      pretendido.
      > c l e a n a r g s ( nome1 )
      u ’ Cl  xe1udio ’

      > c l e a n a r g s ( nome2 )
      u ’ Cl  xe1udio ’
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



”Resolu¸˜o”
       ca
      Definir a fun¸˜o:
                  ca
       def c l e a n a r g s ( s ) :
        try :
          r e t u r n u n i c o d e ( s , ’ u t f −8 ’ )
        except U n i c o d e D e c o d e E r r o r :
          r e t u r n u n i c o d e ( s , ’ windows −1252 ’ )
      O resultado destas fun¸˜o em ambas alternativas tem como
                            ca
      resultado uma string unicode que representa realmente o nome
      pretendido.
      > c l e a n a r g s ( nome1 )
      u ’ Cl  xe1udio ’

      > c l e a n a r g s ( nome2 )
      u ’ Cl  xe1udio ’
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Como tratar conte´do com texto em v´rios encodings
                 u                 a


             Bastantes p´ginas na Web em Portuguˆs tˆm conte´do
                         a                        ee        u
             identificado como estando em UTF-8, mas contendo
             caracteres representados em windows-1252
             Outras identificam-se como estando em latin-1 ou
             windows-1252 mas contˆm palavras codificadas em UTF-8
                                    e
      Uma solu¸˜o de compromisso consiste em:
              ca
             Assumir que todo o conte´do est´ em UTF-8
                                     u      a
             Quando um dado conjunto de bytes n˜o corresponder a
                                                 a
             UTF-8 v´lido assumir que esses bytes representam caracteres
                    a
             em windows-1252 ou latin-1
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Como tratar conte´do com texto em v´rios encodings
                 u                 a


             Bastantes p´ginas na Web em Portuguˆs tˆm conte´do
                         a                        ee        u
             identificado como estando em UTF-8, mas contendo
             caracteres representados em windows-1252
             Outras identificam-se como estando em latin-1 ou
             windows-1252 mas contˆm palavras codificadas em UTF-8
                                    e
      Uma solu¸˜o de compromisso consiste em:
              ca
             Assumir que todo o conte´do est´ em UTF-8
                                     u      a
             Quando um dado conjunto de bytes n˜o corresponder a
                                                 a
             UTF-8 v´lido assumir que esses bytes representam caracteres
                    a
             em windows-1252 ou latin-1
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Implementa¸˜o
          ca

      import c o d e c s

       def h a n d l e e r r o r s ( ex ) :
        s = ex . o b j e c t [ ex . s t a r t ]
        r e t = u n i c o d e ( s , ’ windows −1252 ’ )
        r e t u r n ( r e t , ex . s t a r t +1)

       codecs . r e g i s t e r e r r o r ( ’ clean ’ , h a n d l e e r r o r s )
      Utilizar da seguinte forma:
      > i n p u t = ’ C l  x e 1 u d i o C l  xc3  x a 1 u d i o ’
      > u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ )
      u ’ Cl  xe1udio Cl  xe1udio ’
      > p r i n t u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ )

      Cl´udio Cl´udio
        a       a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Implementa¸˜o
          ca

      import c o d e c s

       def h a n d l e e r r o r s ( ex ) :
        s = ex . o b j e c t [ ex . s t a r t ]
        r e t = u n i c o d e ( s , ’ windows −1252 ’ )
        r e t u r n ( r e t , ex . s t a r t +1)

       codecs . r e g i s t e r e r r o r ( ’ clean ’ , h a n d l e e r r o r s )
      Utilizar da seguinte forma:
      > i n p u t = ’ C l  x e 1 u d i o C l  xc3  x a 1 u d i o ’
      > u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ )
      u ’ Cl  xe1udio Cl  xe1udio ’
      > p r i n t u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ )

      Cl´udio Cl´udio
        a       a
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Isto ´ complicar sem necessidade
     e
Basta trabalhar com bytes sempre em UTF-8

      Esta abordagem n˜o funciona.
                      a
      Como j´ vimos ’nome2’ representa o nome ’Cl´udio’ em UTF-8.
             a                                   a
      Imaginemos que pretendemos imprimir este nome em mai´sculas.
                                                           u
      > nome2 . u p p e r ( )
      ’ C l  xc3  x a 1 u d i o ’
      > p r i n t nome2 . u p p e r ( )

      CL´UDIO
        a

      N˜o ´ o resultado pretendido.
       ae
      > c l e a n a r g s ( nome2 ) . u p p e r ( )
      u ’ CLxc1UDIO ’
      > p r i n t c l e a n a r g s ( nome2 ) . u p p e r ( )

        ´
      CLAUDIO
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o


Isto ´ complicar sem necessidade
     e
Basta trabalhar com bytes sempre em UTF-8

      Esta abordagem n˜o funciona.
                      a
      Como j´ vimos ’nome2’ representa o nome ’Cl´udio’ em UTF-8.
             a                                   a
      Imaginemos que pretendemos imprimir este nome em mai´sculas.
                                                           u
      > nome2 . u p p e r ( )
      ’ C l  xc3  x a 1 u d i o ’
      > p r i n t nome2 . u p p e r ( )

      CL´UDIO
        a

      N˜o ´ o resultado pretendido.
       ae
      > c l e a n a r g s ( nome2 ) . u p p e r ( )
      u ’ CLxc1UDIO ’
      > p r i n t c l e a n a r g s ( nome2 ) . u p p e r ( )

        ´
      CLAUDIO
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Resumo



             sequˆncias de bytes n˜o determinam caracteres univocamente
                 e                a
             sempre que poss´ trabalhar com strings unicode e
                             ıvel
             especificar o encoding de bytes em p´ginas WEB
                                                a
             a WEB est´ progressivamente a migrar para UTF-8
                      a
             durante a transi¸˜o ´ publicado diverso tipo de conte´do com
                             ca e                                 u
             erros
             o problema de interpretar o que se pretende transmitir vs o
             que ´ realmente transmitido necessita de abordagens
                 e
             heur´
                 ısticas
Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es
       ca                                                   co          ca    a      o                           o



Referˆncias
     e




             Cons´rcio Unicode
                  o
             http://www.unicode.org/
             Joel on Software
             Informa¸˜o m´
                    ca    ınima que todo o programador deve saber
             Characters and encodings
             http://www.cs.tut.fi/ jkorpela/chars/index.html
Apˆndice
  e



Python




           Suporta Unicode ”out of the box”
           Tipos distintos para strings unicode e arrays de bytes (str,
           unicode)
           Assume encodings por omiss˜o e converte bytes para strings
                                     a
           unicode
           Suporte bem integrado com a maior parte dos m´dulos
                                                        o
Apˆndice
  e



Perl




           Suporta Unicode ”out of the box”(Encode, perluni)
           Utiliza o mesmo tipo para arrays de bytes e strings unicode
           Distin¸˜o feita implicitamente (bit marca strings unicode)
                 ca
           Suporte no motor de regular expressions
           Abordagem impl´ıcita resulta em comportamentos com
           nuances por vezes pouco ´bvias
                                    o
Apˆndice
  e



JAVA e C#




           Suporta Unicode ”out of the box”
           Tipos distintos para strings unicode e arrays de bytes
           Integra¸˜o total com todos os m´dulos
                  ca                      o
Apˆndice
  e



PHP5




           N˜o suporta unicode de forma integrada
            a
           N˜o existem strings unicode, apenas bytes
             a
           ´ poss´ utilizar extens˜es (iconv, mbstring)
           E     ıvel              o
           Todo o processamento ´ feito obrigatoriamente utilizando
                                 e
           bytes, tipicamente UTF-8
           Biblioteca insuficiente para processar strings ”multibyte”
Apˆndice
  e



PHP6



      Promete:
           Integrar Unicode
           Tipos distintos para strings unicode e arrays de bytes
                 binary
                 string (default encoding)
                 unicode
           Permitir desligar suporte unicode (INI)
           Integrar unicode na maior parte das fun¸˜es built-in
                                                  co

Contenu connexe

Plus de codebits

Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunnercodebits
 
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...codebits
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunnercodebits
 
Exploring XMPP
Exploring XMPPExploring XMPP
Exploring XMPPcodebits
 
Sapo BUS Hands-On
Sapo BUS Hands-OnSapo BUS Hands-On
Sapo BUS Hands-Oncodebits
 
Qtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencerQtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencercodebits
 
Making the Chumby
Making the ChumbyMaking the Chumby
Making the Chumbycodebits
 
Globs - Gestão de Glossários
Globs - Gestão de GlossáriosGlobs - Gestão de Glossários
Globs - Gestão de Glossárioscodebits
 
ATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de TraduçõesATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de Traduçõescodebits
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Javacodebits
 
Sapo GIS Hands-On
Sapo GIS Hands-OnSapo GIS Hands-On
Sapo GIS Hands-Oncodebits
 
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008codebits
 
Optimização de pesquisas Web utilizando Colónias de Formigas
Optimização de pesquisas Web utilizando Colónias de FormigasOptimização de pesquisas Web utilizando Colónias de Formigas
Optimização de pesquisas Web utilizando Colónias de Formigascodebits
 
Web cartooning ao vivo e a cores
Web cartooning ao vivo e a coresWeb cartooning ao vivo e a cores
Web cartooning ao vivo e a corescodebits
 
Introductory Perl
Introductory PerlIntroductory Perl
Introductory Perlcodebits
 
Mapascodebits2007
Mapascodebits2007Mapascodebits2007
Mapascodebits2007codebits
 
Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...
Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...
Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...codebits
 

Plus de codebits (20)

Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
 
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
 
CouchDB
CouchDBCouchDB
CouchDB
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
 
Exploring XMPP
Exploring XMPPExploring XMPP
Exploring XMPP
 
Sapo BUS Hands-On
Sapo BUS Hands-OnSapo BUS Hands-On
Sapo BUS Hands-On
 
Qtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencerQtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencer
 
Making the Chumby
Making the ChumbyMaking the Chumby
Making the Chumby
 
Globs - Gestão de Glossários
Globs - Gestão de GlossáriosGlobs - Gestão de Glossários
Globs - Gestão de Glossários
 
ATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de TraduçõesATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de Traduções
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Java
 
Sapo GIS Hands-On
Sapo GIS Hands-OnSapo GIS Hands-On
Sapo GIS Hands-On
 
Gis@sapo
Gis@sapoGis@sapo
Gis@sapo
 
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
 
Optimização de pesquisas Web utilizando Colónias de Formigas
Optimização de pesquisas Web utilizando Colónias de FormigasOptimização de pesquisas Web utilizando Colónias de Formigas
Optimização de pesquisas Web utilizando Colónias de Formigas
 
Web cartooning ao vivo e a cores
Web cartooning ao vivo e a coresWeb cartooning ao vivo e a cores
Web cartooning ao vivo e a cores
 
Introductory Perl
Introductory PerlIntroductory Perl
Introductory Perl
 
Perl
PerlPerl
Perl
 
Mapascodebits2007
Mapascodebits2007Mapascodebits2007
Mapascodebits2007
 
Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...
Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...
Mashing up the Web, Games, Music, Movies, Money and The Laws Of Physics in Se...
 

Unicode poetry

  • 1. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Unicode no mundo real Normaliza¸˜o do conte´do na WEB ca u Cl´udio Valente a SAPO 13 de Novembro de 2007
  • 2. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Conte´dos u Introdu¸˜o ca 1 Encodings mais comuns 2 Rela¸˜es co Unicode 3 Exemplos de codifica¸˜es co 4 Utiliza¸˜o pr´tica ca a 5 Problemas C´digo exemplificativo o 6 Conven¸˜es co Encoding amb´ ıguo em pedidos V´rios encodings no mesmo documento a Conclus˜es o 7 Objec¸˜es ao Unicode co Resumo
  • 3. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Conceitos Fundamentais Humanos comunicam com s´ ımbolos (letras e ideogr´ficos) a Computadores n˜o tˆm a no¸˜o de s´ ae ca ımbolo, apenas n´meros u Para processar texto num computador ´ necess´rio e a transformar caracteres em n´meros u Um encoding consiste na atribui¸˜o de um n´mero a cada ca u caracter pertencente a um conjunto
  • 4. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Conceitos Fundamentais Humanos comunicam com s´ ımbolos (letras e ideogr´ficos) a Computadores n˜o tˆm a no¸˜o de s´ ae ca ımbolo, apenas n´meros u Para processar texto num computador ´ necess´rio e a transformar caracteres em n´meros u Um encoding consiste na atribui¸˜o de um n´mero a cada ca u caracter pertencente a um conjunto
  • 5. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o ASCII O encoding mais conhecido e usado na pr´tica ´ o ASCII a e (American Standard Code for Information Interchange) Caracteres n˜o acentuados da Europa Ocidental e do Norte a Associa a cada caracter um n´mero entre 0 e 127 u Cada caracter ASCII pode ser representado por um byte Na realidade apenas s˜o necess´rios 7 bits a a Exemplo, o caracter A ´ representado pelo n´mero e u 4116 = 6510 = 010000012
  • 6. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o ASCII O encoding mais conhecido e usado na pr´tica ´ o ASCII a e (American Standard Code for Information Interchange) Caracteres n˜o acentuados da Europa Ocidental e do Norte a Associa a cada caracter um n´mero entre 0 e 127 u Cada caracter ASCII pode ser representado por um byte Na realidade apenas s˜o necess´rios 7 bits a a Exemplo, o caracter A ´ representado pelo n´mero e u 4116 = 6510 = 010000012
  • 7. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Encodings utilizados em Portuguˆs e L´ ıngua Portuguesa utiliza caracteres acentuados ASCII ´ insuficiente e Os encodings mais utilizados em Portuguˆs s˜o: ea ISO-8859-1 (latin-1) ISO-8859-15 Windows-1252 UTF-8 UTF-16
  • 8. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Encodings utilizados em Portuguˆs e L´ ıngua Portuguesa utiliza caracteres acentuados ASCII ´ insuficiente e Os encodings mais utilizados em Portuguˆs s˜o: ea ISO-8859-1 (latin-1) ISO-8859-15 Windows-1252 UTF-8 UTF-16
  • 9. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Rela¸˜es entre Encodings co ASCII
  • 10. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Rela¸˜es entre Encodings co `´˜¸ aaac ASCII ISO-8859-1 Extens˜o m´ a ınima com caracteres acentuados das l´ ınguas latinas
  • 11. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Rela¸˜es entre Encodings co ISO-8859-15 e `´˜¸ aaac ASCII ISO-8859-1 e Windows-1252 ımbolo e n˜o faz parte do latin-1 e para o incluir foram O s´ a criadas v´rias extens˜es incompat´ a o ıveis
  • 12. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Rela¸˜es entre Encodings co ISO-8859-15 e tudo(?) `´˜¸ aaac ASCII ISO-8859-1 Unicode UTF-(8-16-32) e Windows-1252 O Unicode ´ suposto conter todos os caracteres considerados e em l´ ınguas usadas actualmente bem como muitas j´ mortas. a
  • 13. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o O que ´ o Unicode e Representa conte´do escrito em (quase) qualquer sistema u humano que exista A cada caracter (grifo) associa um valor num´rico e Define formas de processar dados tais como: Classes de caracteres (alfa-num´ricos, pontua¸˜o, s´ e ca ımbolos) Compara¸˜es entre caracteres (ordena¸˜o alfab´tica) co ca e Direccionalidade do texto
  • 14. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o O que ´ o Unicode e Representa conte´do escrito em (quase) qualquer sistema u humano que exista A cada caracter (grifo) associa um valor num´rico e Define formas de processar dados tais como: Classes de caracteres (alfa-num´ricos, pontua¸˜o, s´ e ca ımbolos) Compara¸˜es entre caracteres (ordena¸˜o alfab´tica) co ca e Direccionalidade do texto
  • 15. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Caracter´ ısticas t´cnicas do Unicode e Define aproximadamente 100 000 caracteres ´ E uma extens˜o do latin-1. a Todos os caracteres portugueses tˆm a mesma representa¸˜o e ca em unicode N˜o ´ poss´ continuar a representar cada caracter por um ae ıvel byte ´ E necess´rio fazer corresponder caracteres unicode a uma a sequˆncia de bytes e UTF-32 UTF-16 UTF-8 UTF-7
  • 16. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Caracter´ ısticas t´cnicas do Unicode e Define aproximadamente 100 000 caracteres ´ E uma extens˜o do latin-1. a Todos os caracteres portugueses tˆm a mesma representa¸˜o e ca em unicode N˜o ´ poss´ continuar a representar cada caracter por um ae ıvel byte ´ E necess´rio fazer corresponder caracteres unicode a uma a sequˆncia de bytes e UTF-32 UTF-16 UTF-8 UTF-7
  • 17. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Caracter´ ısticas t´cnicas do Unicode e Define aproximadamente 100 000 caracteres ´ E uma extens˜o do latin-1. a Todos os caracteres portugueses tˆm a mesma representa¸˜o e ca em unicode N˜o ´ poss´ continuar a representar cada caracter por um ae ıvel byte ´ E necess´rio fazer corresponder caracteres unicode a uma a sequˆncia de bytes e UTF-32 UTF-16 UTF-8 UTF-7
  • 18. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o UTF-8 UTF = Unicode Transformation Format Faz corresponder a uma sequˆncia de caracteres unicode uma e sequˆncia de bytes e Vantagens Conte´do ASCII fica inalterado u Independente de ordena¸˜o de bytes (little-endian vs ca big-endian) Codifica todos os caracteres Unicode Desvantagens Podem ser necess´rios v´rios bytes por caracter a a N˜o ´ 7bit safe ae O acesso aleat´rio a um caracter n˜o ´ poss´ o ae ıvel
  • 19. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o UTF-8 UTF = Unicode Transformation Format Faz corresponder a uma sequˆncia de caracteres unicode uma e sequˆncia de bytes e Vantagens Conte´do ASCII fica inalterado u Independente de ordena¸˜o de bytes (little-endian vs ca big-endian) Codifica todos os caracteres Unicode Desvantagens Podem ser necess´rios v´rios bytes por caracter a a N˜o ´ 7bit safe ae O acesso aleat´rio a um caracter n˜o ´ poss´ o ae ıvel
  • 20. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o UTF-8 UTF = Unicode Transformation Format Faz corresponder a uma sequˆncia de caracteres unicode uma e sequˆncia de bytes e Vantagens Conte´do ASCII fica inalterado u Independente de ordena¸˜o de bytes (little-endian vs ca big-endian) Codifica todos os caracteres Unicode Desvantagens Podem ser necess´rios v´rios bytes por caracter a a N˜o ´ 7bit safe ae O acesso aleat´rio a um caracter n˜o ´ poss´ o ae ıvel
  • 21. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co ıticos e e alfabeto latino com diacr´ e ˜ A A C ¸ ASCII A N.D. N.D. N.D. ISO-8859-1 A [C3] [C7] N.D. ISO-8859-15 A [C3] [C7] [A4] Windows-1252 A [C3] [C7] [80] UTF-8 A [C3][83] [C3][87] [E2][82][AC] UTF-16LE A[00] [C3][00] [C7][00] [AC][20] UTF-7 A +AMM- +AMc- +IKw- Unicode U+41 U+C3 U+C7 U+20AC ASCII n˜o suporta acentos nem e a
  • 22. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co ıticos e e alfabeto latino com diacr´ e ˜ A A C ¸ ASCII A N.D. N.D. N.D. ISO-8859-1 A [C3] [C7] N.D. ISO-8859-15 A [C3] [C7] [A4] Windows-1252 A [C3] [C7] [80] UTF-8 A [C3][83] [C3][87] [E2][82][AC] UTF-16LE A[00] [C3][00] [C7][00] [AC][20] UTF-7 A +AMM- +AMc- +IKw- Unicode U+41 U+C3 U+C7 U+20AC ISO-8859-1 suporta acentos, mas n˜o o e a
  • 23. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co ıticos e e alfabeto latino com diacr´ e ˜ A A C ¸ ASCII A N.D. N.D. N.D. ISO-8859-1 A [C3] [C7] N.D. ISO-8859-15 A [C3] [C7] [A4] Windows-1252 A [C3] [C7] [80] UTF-8 A [C3][83] [C3][87] [E2][82][AC] UTF-16LE A[00] [C3][00] [C7][00] [AC][20] UTF-7 A +AMM- +AMc- +IKw- Unicode U+41 U+C3 U+C7 U+20AC ISO-8859-1 suporta acentos, mas n˜o o e a
  • 24. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co ıticos e e alfabeto latino com diacr´ e ˜ A A C ¸ ASCII A N.D. N.D. N.D. ISO-8859-1 A [C3] [C7] N.D. ISO-8859-15 A [C3] [C7] [A4] Windows-1252 A [C3] [C7] [80] UTF-8 A [C3][83] [C3][87] [E2][82][AC] UTF-16LE A[00] [C3][00] [C7][00] [AC][20] UTF-7 A +AMM- +AMc- +IKw- Unicode U+41 U+C3 U+C7 U+20AC ISO-8859-15 e Windows-1252 suportam e de forma incompat´ ıvel
  • 25. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co ıticos e e alfabeto latino com diacr´ e ˜ A A C ¸ ASCII A N.D. N.D. N.D. ISO-8859-1 A [C3] [C7] N.D. ISO-8859-15 A [C3] [C7] [A4] Windows-1252 A [C3] [C7] [80] UTF-8 A [C3][83] [C3][87] [E2][82][AC] UTF-16LE A[00] [C3][00] [C7][00] [AC][20] UTF-7 A +AMM- +AMc- +IKw- Unicode U+41 U+C3 U+C7 U+20AC O Unicode ´ extens˜o do ISO-8859-1 e a
  • 26. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co ıticos e e alfabeto latino com diacr´ e ˜ A A C ¸ ASCII A N.D. N.D. N.D. ISO-8859-1 A [C3] [C7] N.D. ISO-8859-15 A [C3] [C7] [A4] Windows-1252 A [C3] [C7] [80] UTF-8 A [C3][83] [C3][87] [E2][82][AC] UTF-16LE A[00] [C3][00] [C7][00] [AC][20] UTF-7 A +AMM- +AMc- +IKw- Unicode U+41 U+C3 U+C7 U+20AC UTF-8 necessita de um n´mero vari´vel de bytes u a
  • 27. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co ıticos e e alfabeto latino com diacr´ e ˜ A A C ¸ ASCII A N.D. N.D. N.D. ISO-8859-1 A [C3] [C7] N.D. ISO-8859-15 A [C3] [C7] [A4] Windows-1252 A [C3] [C7] [80] UTF-8 A [C3][83] [C3][87] [E2][82][AC] UTF-16LE A[00] [C3][00] [C7][00] [AC][20] UTF-7 A +AMM- +AMc- +IKw- Unicode U+41 U+C3 U+C7 U+20AC UTF-16 e UTF-32 podem ser Little Endian ou Big Endian
  • 28. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co s´ ımbolos comuns 1 œ “ ... 2 ASCII N.D. N.D. N.D. N.D. ISO-8859-1 [BD] N.D. N.D. N.D. ISO-8859-15 N.D. [BD] N.D. N.D. Windows-1252 [BD] [9C] [93] [85] UTF-8 [C2][BD] [C5][93] [E2][80][9C] [E2][80][A6] UTF-16LE [BD][00] S[01] [1C][20] [26][20] UTF-7 +AL0- +AVM- +IBw- +ICY- Unicode U+BD U+153 U+201C U+2026 ISO-8859-15 n˜o ´ estritamente uma extens˜o de ISO-8859-1 ae a
  • 29. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co s´ ımbolos comuns 1 œ “ ... 2 ASCII N.D. N.D. N.D. N.D. ISO-8859-1 [BD] N.D. N.D. N.D. ISO-8859-15 N.D. [BD] N.D. N.D. Windows-1252 [BD] [9C] [93] [85] UTF-8 [C2][BD] [C5][93] [E2][80][9C] [E2][80][A6] UTF-16LE [BD][00] S[01] [1C][20] [26][20] UTF-7 +AL0- +AVM- +IBw- +ICY- Unicode U+BD U+153 U+201C U+2026 ”smart quotes”e reticˆncias definidas no Windows-1252 mas e n˜o no ISO-8859-1(5) a
  • 30. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Exemplos de codifica¸˜es co s´ ımbolos comuns 1 œ “ ... 2 ASCII N.D. N.D. N.D. N.D. ISO-8859-1 [BD] N.D. N.D. N.D. ISO-8859-15 N.D. [BD] N.D. N.D. Windows-1252 [BD] [9C] [93] [85] UTF-8 [C2][BD] [C5][93] [E2][80][9C] [E2][80][A6] UTF-16LE [BD][00] S[01] [1C][20] [26][20] UTF-7 +AL0- +AVM- +IBw- +ICY- Unicode U+BD U+153 U+201C U+2026 Unicode codifica todos os caracteres (para efeitos pr´ticos) a
  • 31. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o HTML Identificar o conte´do da p´gina como estando codificado em u a UTF-8 nos cabe¸alhos de HTTP. c Content-Type: text/html; charset=utf-8 Identificar no documento. <head> <meta http-equiv=quot;content-typequot; content=quot;text/html; charset=utf-8quot; /> </head> Forms. O encoding deve ser especificado sendo o da p´gina por a omiss˜o a <form accept-charset=quot;UTF-8quot;> ... </form>
  • 32. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o HTML Identificar o conte´do da p´gina como estando codificado em u a UTF-8 nos cabe¸alhos de HTTP. c Content-Type: text/html; charset=utf-8 Identificar no documento. <head> <meta http-equiv=quot;content-typequot; content=quot;text/html; charset=utf-8quot; /> </head> Forms. O encoding deve ser especificado sendo o da p´gina por a omiss˜o a <form accept-charset=quot;UTF-8quot;> ... </form>
  • 33. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o HTML Identificar o conte´do da p´gina como estando codificado em u a UTF-8 nos cabe¸alhos de HTTP. c Content-Type: text/html; charset=utf-8 Identificar no documento. <head> <meta http-equiv=quot;content-typequot; content=quot;text/html; charset=utf-8quot; /> </head> Forms. O encoding deve ser especificado sendo o da p´gina por a omiss˜o a <form accept-charset=quot;UTF-8quot;> ... </form>
  • 34. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Parˆmetros em Unicode a Quando um pedido GET ou POST ´ efectuado, os parˆmetros e a devem ser transformados (uri escape). Infelizmente o conte´do u associado aos bytes n˜o ´ transmitido no pedido obrigando a: ae For¸ar um determinado encoding (parˆmetro accept-charset c a no form) Utilizar argumentos heur´ ısticos Assumir que est´ em UTF-8 a Caso n˜o seja um conjunto de caracteres v´lido assumir latin-1 a a ou melhor Windows-1252 Come¸a a ser comum enviar caracteres fora do ASCII como c %uXXXX onde os quatro X representam o c´digo unicode em o hexadecimal
  • 35. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Parˆmetros em Unicode a Quando um pedido GET ou POST ´ efectuado, os parˆmetros e a devem ser transformados (uri escape). Infelizmente o conte´do u associado aos bytes n˜o ´ transmitido no pedido obrigando a: ae For¸ar um determinado encoding (parˆmetro accept-charset c a no form) Utilizar argumentos heur´ ısticos Assumir que est´ em UTF-8 a Caso n˜o seja um conjunto de caracteres v´lido assumir latin-1 a a ou melhor Windows-1252 Come¸a a ser comum enviar caracteres fora do ASCII como c %uXXXX onde os quatro X representam o c´digo unicode em o hexadecimal
  • 36. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Parˆmetros em Unicode a Quando um pedido GET ou POST ´ efectuado, os parˆmetros e a devem ser transformados (uri escape). Infelizmente o conte´do u associado aos bytes n˜o ´ transmitido no pedido obrigando a: ae For¸ar um determinado encoding (parˆmetro accept-charset c a no form) Utilizar argumentos heur´ ısticos Assumir que est´ em UTF-8 a Caso n˜o seja um conjunto de caracteres v´lido assumir latin-1 a a ou melhor Windows-1252 Come¸a a ser comum enviar caracteres fora do ASCII como c %uXXXX onde os quatro X representam o c´digo unicode em o hexadecimal
  • 37. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Erros comuns P´ginas sem qualquer informa¸˜o de encoding a ca Conte´do latin-1 misturado com UTF-8 u GET ’http://some.domain.pt/’| iconv -f utf-8 -t utf-8 >/dev/null iconv: illegal input sequence at position 48123 Conte´do UTF-8 em p´ginas latin-1. P´gina que se identifica u a a como estando em latin-1 mas que cont´m por exemplo e ˜ ClA¡udio (deveria ser Cl´udio). a
  • 38. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Erros comuns P´ginas sem qualquer informa¸˜o de encoding a ca Conte´do latin-1 misturado com UTF-8 u GET ’http://some.domain.pt/’| iconv -f utf-8 -t utf-8 >/dev/null iconv: illegal input sequence at position 48123 Conte´do UTF-8 em p´ginas latin-1. P´gina que se identifica u a a como estando em latin-1 mas que cont´m por exemplo e ˜ ClA¡udio (deveria ser Cl´udio). a
  • 39. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Erros comuns P´ginas sem qualquer informa¸˜o de encoding a ca Conte´do latin-1 misturado com UTF-8 u GET ’http://some.domain.pt/’| iconv -f utf-8 -t utf-8 >/dev/null iconv: illegal input sequence at position 48123 Conte´do UTF-8 em p´ginas latin-1. P´gina que se identifica u a a como estando em latin-1 mas que cont´m por exemplo e ˜ ClA¡udio (deveria ser Cl´udio). a
  • 40. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o C´digo m´ o ınimo Uma string usual ´ apenas um conjunto de bytes e > s= ’ C l x e 1 u d i o ’ Para interpretarmos como caracteres temos de especificar o encoding > u1 = u n i c o d e ( ’ C l x e 1 u d i o ’ , ’ l a t i n −1 ’ ) Mas podemos fazer de forma equivalente > u2 = u n i c o d e ( ’ C l xc3 x a 1 u d i o ’ , ’ u t f −8 ’ ) Ou dizer logo que se trata duma string unicode > u3 = u ’ C l u 0 0 e 1 u d i o ’ u1, u2 e u3 representam a mesma sequˆncia de grifos. e > p r i n t u1==u2 and u2==u3 True
  • 41. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o C´digo m´ o ınimo Uma string usual ´ apenas um conjunto de bytes e > s= ’ C l x e 1 u d i o ’ Para interpretarmos como caracteres temos de especificar o encoding > u1 = u n i c o d e ( ’ C l x e 1 u d i o ’ , ’ l a t i n −1 ’ ) Mas podemos fazer de forma equivalente > u2 = u n i c o d e ( ’ C l xc3 x a 1 u d i o ’ , ’ u t f −8 ’ ) Ou dizer logo que se trata duma string unicode > u3 = u ’ C l u 0 0 e 1 u d i o ’ u1, u2 e u3 representam a mesma sequˆncia de grifos. e > p r i n t u1==u2 and u2==u3 True
  • 42. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o C´digo m´ o ınimo Uma string usual ´ apenas um conjunto de bytes e > s= ’ C l x e 1 u d i o ’ Para interpretarmos como caracteres temos de especificar o encoding > u1 = u n i c o d e ( ’ C l x e 1 u d i o ’ , ’ l a t i n −1 ’ ) Mas podemos fazer de forma equivalente > u2 = u n i c o d e ( ’ C l xc3 x a 1 u d i o ’ , ’ u t f −8 ’ ) Ou dizer logo que se trata duma string unicode > u3 = u ’ C l u 0 0 e 1 u d i o ’ u1, u2 e u3 representam a mesma sequˆncia de grifos. e > p r i n t u1==u2 and u2==u3 True
  • 43. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o C´digo m´ o ınimo Uma string usual ´ apenas um conjunto de bytes e > s= ’ C l x e 1 u d i o ’ Para interpretarmos como caracteres temos de especificar o encoding > u1 = u n i c o d e ( ’ C l x e 1 u d i o ’ , ’ l a t i n −1 ’ ) Mas podemos fazer de forma equivalente > u2 = u n i c o d e ( ’ C l xc3 x a 1 u d i o ’ , ’ u t f −8 ’ ) Ou dizer logo que se trata duma string unicode > u3 = u ’ C l u 0 0 e 1 u d i o ’ u1, u2 e u3 representam a mesma sequˆncia de grifos. e > p r i n t u1==u2 and u2==u3 True
  • 44. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Argumentos em encoding amb´ ıguo Supor que ’nome’ cont´m o valor de um argumento de um pedido e GET depois de url decoded. S´ sabemos uma sequˆncia de bytes o e mas o utilizador realmente pretendeu introduzir o nome ’Cl´udio’. a http://domain.pt/?q=Cl%E1udio http://domain.pt/?q=Cl%C3%A1udio > nome1 = ’ C l x e 1 u d i o ’ > nome2 = ’ C l xc3 x a 1 u d i o ’ Como detectar heuristicamente o que o utilizador pretende?
  • 45. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Argumentos em encoding amb´ ıguo Supor que ’nome’ cont´m o valor de um argumento de um pedido e GET depois de url decoded. S´ sabemos uma sequˆncia de bytes o e mas o utilizador realmente pretendeu introduzir o nome ’Cl´udio’. a http://domain.pt/?q=Cl%E1udio http://domain.pt/?q=Cl%C3%A1udio > nome1 = ’ C l x e 1 u d i o ’ > nome2 = ’ C l xc3 x a 1 u d i o ’ Como detectar heuristicamente o que o utilizador pretende?
  • 46. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o ”Resolu¸˜o” ca Definir a fun¸˜o: ca def c l e a n a r g s ( s ) : try : r e t u r n u n i c o d e ( s , ’ u t f −8 ’ ) except U n i c o d e D e c o d e E r r o r : r e t u r n u n i c o d e ( s , ’ windows −1252 ’ ) O resultado destas fun¸˜o em ambas alternativas tem como ca resultado uma string unicode que representa realmente o nome pretendido. > c l e a n a r g s ( nome1 ) u ’ Cl xe1udio ’ > c l e a n a r g s ( nome2 ) u ’ Cl xe1udio ’
  • 47. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o ”Resolu¸˜o” ca Definir a fun¸˜o: ca def c l e a n a r g s ( s ) : try : r e t u r n u n i c o d e ( s , ’ u t f −8 ’ ) except U n i c o d e D e c o d e E r r o r : r e t u r n u n i c o d e ( s , ’ windows −1252 ’ ) O resultado destas fun¸˜o em ambas alternativas tem como ca resultado uma string unicode que representa realmente o nome pretendido. > c l e a n a r g s ( nome1 ) u ’ Cl xe1udio ’ > c l e a n a r g s ( nome2 ) u ’ Cl xe1udio ’
  • 48. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Como tratar conte´do com texto em v´rios encodings u a Bastantes p´ginas na Web em Portuguˆs tˆm conte´do a ee u identificado como estando em UTF-8, mas contendo caracteres representados em windows-1252 Outras identificam-se como estando em latin-1 ou windows-1252 mas contˆm palavras codificadas em UTF-8 e Uma solu¸˜o de compromisso consiste em: ca Assumir que todo o conte´do est´ em UTF-8 u a Quando um dado conjunto de bytes n˜o corresponder a a UTF-8 v´lido assumir que esses bytes representam caracteres a em windows-1252 ou latin-1
  • 49. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Como tratar conte´do com texto em v´rios encodings u a Bastantes p´ginas na Web em Portuguˆs tˆm conte´do a ee u identificado como estando em UTF-8, mas contendo caracteres representados em windows-1252 Outras identificam-se como estando em latin-1 ou windows-1252 mas contˆm palavras codificadas em UTF-8 e Uma solu¸˜o de compromisso consiste em: ca Assumir que todo o conte´do est´ em UTF-8 u a Quando um dado conjunto de bytes n˜o corresponder a a UTF-8 v´lido assumir que esses bytes representam caracteres a em windows-1252 ou latin-1
  • 50. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Implementa¸˜o ca import c o d e c s def h a n d l e e r r o r s ( ex ) : s = ex . o b j e c t [ ex . s t a r t ] r e t = u n i c o d e ( s , ’ windows −1252 ’ ) r e t u r n ( r e t , ex . s t a r t +1) codecs . r e g i s t e r e r r o r ( ’ clean ’ , h a n d l e e r r o r s ) Utilizar da seguinte forma: > i n p u t = ’ C l x e 1 u d i o C l xc3 x a 1 u d i o ’ > u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ ) u ’ Cl xe1udio Cl xe1udio ’ > p r i n t u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ ) Cl´udio Cl´udio a a
  • 51. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Implementa¸˜o ca import c o d e c s def h a n d l e e r r o r s ( ex ) : s = ex . o b j e c t [ ex . s t a r t ] r e t = u n i c o d e ( s , ’ windows −1252 ’ ) r e t u r n ( r e t , ex . s t a r t +1) codecs . r e g i s t e r e r r o r ( ’ clean ’ , h a n d l e e r r o r s ) Utilizar da seguinte forma: > i n p u t = ’ C l x e 1 u d i o C l xc3 x a 1 u d i o ’ > u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ ) u ’ Cl xe1udio Cl xe1udio ’ > p r i n t u n i c o d e ( i n p u t , ’ u t f −8 ’ , ’ c l e a n ’ ) Cl´udio Cl´udio a a
  • 52. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Isto ´ complicar sem necessidade e Basta trabalhar com bytes sempre em UTF-8 Esta abordagem n˜o funciona. a Como j´ vimos ’nome2’ representa o nome ’Cl´udio’ em UTF-8. a a Imaginemos que pretendemos imprimir este nome em mai´sculas. u > nome2 . u p p e r ( ) ’ C l xc3 x a 1 u d i o ’ > p r i n t nome2 . u p p e r ( ) CL´UDIO a N˜o ´ o resultado pretendido. ae > c l e a n a r g s ( nome2 ) . u p p e r ( ) u ’ CLxc1UDIO ’ > p r i n t c l e a n a r g s ( nome2 ) . u p p e r ( ) ´ CLAUDIO
  • 53. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Isto ´ complicar sem necessidade e Basta trabalhar com bytes sempre em UTF-8 Esta abordagem n˜o funciona. a Como j´ vimos ’nome2’ representa o nome ’Cl´udio’ em UTF-8. a a Imaginemos que pretendemos imprimir este nome em mai´sculas. u > nome2 . u p p e r ( ) ’ C l xc3 x a 1 u d i o ’ > p r i n t nome2 . u p p e r ( ) CL´UDIO a N˜o ´ o resultado pretendido. ae > c l e a n a r g s ( nome2 ) . u p p e r ( ) u ’ CLxc1UDIO ’ > p r i n t c l e a n a r g s ( nome2 ) . u p p e r ( ) ´ CLAUDIO
  • 54. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Resumo sequˆncias de bytes n˜o determinam caracteres univocamente e a sempre que poss´ trabalhar com strings unicode e ıvel especificar o encoding de bytes em p´ginas WEB a a WEB est´ progressivamente a migrar para UTF-8 a durante a transi¸˜o ´ publicado diverso tipo de conte´do com ca e u erros o problema de interpretar o que se pretende transmitir vs o que ´ realmente transmitido necessita de abordagens e heur´ ısticas
  • 55. Introdu¸˜o Encodings mais comuns Unicode Exemplos de codifica¸˜es Utiliza¸˜o pr´tica C´digo exemplificativo Conclus˜es ca co ca a o o Referˆncias e Cons´rcio Unicode o http://www.unicode.org/ Joel on Software Informa¸˜o m´ ca ınima que todo o programador deve saber Characters and encodings http://www.cs.tut.fi/ jkorpela/chars/index.html
  • 56. Apˆndice e Python Suporta Unicode ”out of the box” Tipos distintos para strings unicode e arrays de bytes (str, unicode) Assume encodings por omiss˜o e converte bytes para strings a unicode Suporte bem integrado com a maior parte dos m´dulos o
  • 57. Apˆndice e Perl Suporta Unicode ”out of the box”(Encode, perluni) Utiliza o mesmo tipo para arrays de bytes e strings unicode Distin¸˜o feita implicitamente (bit marca strings unicode) ca Suporte no motor de regular expressions Abordagem impl´ıcita resulta em comportamentos com nuances por vezes pouco ´bvias o
  • 58. Apˆndice e JAVA e C# Suporta Unicode ”out of the box” Tipos distintos para strings unicode e arrays de bytes Integra¸˜o total com todos os m´dulos ca o
  • 59. Apˆndice e PHP5 N˜o suporta unicode de forma integrada a N˜o existem strings unicode, apenas bytes a ´ poss´ utilizar extens˜es (iconv, mbstring) E ıvel o Todo o processamento ´ feito obrigatoriamente utilizando e bytes, tipicamente UTF-8 Biblioteca insuficiente para processar strings ”multibyte”
  • 60. Apˆndice e PHP6 Promete: Integrar Unicode Tipos distintos para strings unicode e arrays de bytes binary string (default encoding) unicode Permitir desligar suporte unicode (INI) Integrar unicode na maior parte das fun¸˜es built-in co