[Cascavel-pm] Trabalhando com encodings (Was: Re: Res: gerando arquivos tipo unix)

Daniel Ruoso daniel em ruoso.com
Quinta Janeiro 8 06:25:03 PST 2009


Em Qui, 2009-01-08 às 15:04 +0100, Nelson Ferraz escreveu:
> Só um comentário. No final do seu texto você diz para sempre usarmos:
>   use utf8;
> No entanto, a documentacão do módulo diz claramente:
>   "Do not use this pragma for anything else than telling Perl that
> your script is written in UTF-8."

Nesse trecho ele está se referindo à possibilidade de alguem fazer use
desse módulo para usar as funções utf8::*. Ele está dizendo que você não
precisa fazer "use utf8" para acessar essas funções.

O caso que estou dizendo é exatamente para dizer que o script em si está
escrito em utf8.

> É sempre melhor escrever código em ASCII -- particularmente se o
> código precisar ser editado por outras pessoas.

Assim, é claro que se você puder não ter nenhuma string literal no seu
módulo você não precisa do "use utf8".

Agora assim, precisamos entender, em primeiro lugar, que ASCII não se
refere propriamente a sistemas operacionais modernos, porque eles
implementam "codepages" específicos que não batem com a tabela ASCII
original.

Uma string literal sempre está em alguma codificação, no caso do código
fonte Perl, ela vai estar em iso8859-1 ou utf8. Não existe "sem
codificação".

O que acontece é que existe uma área "segura" entre as codificações, e
essa área costuma estar nos primeiros 127 caracteres do "codepage", as
vezes referido por 7bit, mas é preciso entender que não é porque você
não usa caracteres acima dos 7bit que você não está em uma codificação
específica. Novamente, no caso de código Perl, vai estar em iso8859-1 ou
utf8.

O que isso significa é que, se as suas entradas/saidas são utf8, o seu
código tem strings literais e você não disse "use utf8", o interpretador
terá que fazer uma conversão dessas strings sempre que elas forem
enviadas para esses filehandles, mesmo que você use apenas os primeiros
7 bits.

É por isso que "use utf8" não é desnecessário...

daniel



Mais detalhes sobre a lista de discussão Cascavel-pm