Unicode vs UTF-8 confusão em Python / Django?

votos
28

Tropecei esta passagem no tutorial Django :

Modelos do Django têm um padrão str () método que chama unicode () e converte o resultado para um UTF-8 bytestring. Isto significa que Unicode (p) retornará uma cadeia Unicode, e str (P) vai devolver uma cadeia normal, com caracteres codificados como UTF-8.

Agora, estou confuso porque afaik Unicode não é qualquer representação particular, então o que é uma seqüência de caracteres Unicode em Python? Isso quer dizer UCS-2? Googling apareceu esta Python Unicode Tutorial que afirma corajosamente

Unicode é uma codificação de dois bytes, que abrange todos os sistemas de escrita comuns do mundo.

que é errado liso, ou é? Eu ter sido confundido muitas vezes por conjunto de caracteres e problemas de codificação, mas aqui eu tenho certeza que a documentação que estou lendo é confuso. Alguém sabe o que está acontecendo em Python quando ele me dá uma seqüência de caracteres Unicode?

Publicado 22/08/2008 em 13:01
fonte usuário
Em outras línguas...                            


5 respostas

votos
48

o que é uma "seqüência de caracteres Unicode" em Python? Isso quer dizer UCS-2?

cadeias Unicode em Python são armazenadas internamente quer como UCS-2 (de comprimento fixo representação 16-bit, quase o mesmo que UTF-16) ou (representação de comprimento fixo de 32 bits) UCS-4 / UTF-32. É uma opção em tempo de compilação; no Windows é sempre UTF-16, enquanto muitas distribuições Linux definir UTF-32 ( 'modo panorâmico') para suas versões do Python.

Você geralmente não são supostamente para cuidar: você verá Unicode de código-pontos como elementos únicos em suas cordas e você não vai saber se eles estão armazenados como dois ou quatro bytes. Se você estiver em uma compilação UTF-16 e você precisa lidar com caracteres fora do Basic Multilingual Plane você estará fazendo errado, mas que ainda é muito raro, e os usuários que realmente precisam os caracteres extras devem ser compilar ampla constrói.

plain errado, ou é?

Sim, é completamente errado. Para ser justo eu acho que tutorial é bastante antiga; provavelmente cadeias de caracteres Unicode de largura pré-datas, se não Unicode 3.1 (a versão que introduziu caracteres fora do Multilingual Básico Plane).

Há uma fonte adicional de confusão decorrente do hábito de usar o termo “Unicode” do Windows para dizer, especificamente, a codificação UTF-16LE que o NT usa internamente. Pessoas de Microsoftland pode muitas vezes copiar este hábito um tanto enganador.

Respondeu 07/02/2009 em 01:54
fonte usuário

votos
8

Enquanto isso, eu fiz uma pesquisa refinada para verificar o que a representação interna em Python é, e também quais são seus limites. " A verdade sobre Unicode em Python " é um artigo muito bom que cita diretamente dos desenvolvedores do Python. Aparentemente, a representação interna é ou UCS-2 ou UCS-4, dependendo de um comutador de tempo de compilação. Então Jon, não é UTF-16, mas sua resposta me colocou no caminho certo de qualquer forma, obrigado.

Respondeu 22/08/2008 em 13:32
fonte usuário

votos
0

lojas Python Unicode como UTF-16. str () irá voltar a representação UTF-8 da corda UTF-16.

Respondeu 22/08/2008 em 13:03
fonte usuário

votos
-1

De Wikipedia em UTF-8 :

UTF-8 (8 bits UCS / Unicode Transformation Format) é uma codificação de caracteres de comprimento variável para Unicode. Ele é capaz de representar qualquer caracter Unicode na norma , no entanto, a codificação inicial dos códigos de bites e as atribuições de caracteres para UTF-8 é compatível com ASCII. Por estas razões, está se tornando a codificação preferida para e-mail, páginas da web [1], e outros locais onde os caracteres são armazenados ou transmitidos.

Então, é em qualquer lugar entre um e quatro bytes dependendo de qual personagem que você deseja representar dentro do reino do Unicode.

De Wikipedia em Unicode:

Em computação, Unicode é um padrão da indústria, permitindo computadores para representar de forma consistente e manipular texto expressa na maioria dos sistemas de escrita do mundo .

Por isso, é capaz de representar a maioria (mas não todos) dos sistemas de escrita do mundo.

Eu espero que isso ajude :)

Respondeu 22/08/2008 em 13:10
fonte usuário

votos
-2

Então, o que é uma "seqüência de caracteres Unicode" em Python?

Python 'sabe' que a seqüência é Unicode. Portanto, se você regex nele, ele vai saber qual é o caráter e que não etc é, o que é realmente útil. Se você fez um strlen que também irá dar o resultado correto. Como exemplo, se você tinha corda contar Olá, você receberá 5 (mesmo se for Unicode). Mas se você fez uma contagem corda de uma palavra estrangeira e essa seqüência não foi uma seqüência de caracteres Unicode que você terá muito maior resultado. Pythong usa as informações formam a base de dados de caracteres Unicode para identificar cada caractere na seqüência de caracteres Unicode. Espero que ajude.

Respondeu 22/08/2008 em 13:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more