Codificação de 10 caracteres

O conteúdo de hoje pode realmente ser resumido em uma frase:

Use python3 para peidar

Como a conclusão é relativamente importante, ela é listada primeiro

Conclusão:

1. A memória é corrigida usando unicode, o que podemos alterar é o formato usado para salvar no disco rígido.
Caracteres inglês + chinês- "unicode-" gbk
inglês + japonês- "unicode-" shift-jis
caracteres universais "-unicode-" utf-8

2. O problema do acesso ilegível ao arquivo de texto está
desarrumado: A solução é que o formato de codificação seja definido para suportar o formato da string no arquivo.A
solução é que o formato de codificação do arquivo seja armazenado no disco rígido. Que formato de codificação é lido na memória

 

3. A codificação padrão do interpretador Python para ler arquivos.Padrão
Python3: utf-8
Padrão Python2: ASCII

Especifique o cabeçalho do arquivo para modificar a codificação padrão:
escreva na primeira linha do arquivo py:
#coding: gbk

4. A regra principal para garantir que os dois primeiros estágios do programa python não sejam distorcidos:
especifique o cabeçalho do arquivo
# coding: o formato de codificação usado quando o arquivo foi originalmente armazenado no disco rígido


5.
O tipo str do python3 é armazenado diretamente no formato unicode por padrão e não será ilegível de qualquer
maneira.Verifique se o tipo str do python2 não é ilegível
x = u '上'


6. Entenda que o
interpretador python2 possui dois tipos de strings: str, unicode
# str type
x = '上' # O valor da string será armazenado no espaço de memória do valor da variável de acordo com o formato de codificação especificado pelo cabeçalho do arquivo
# unicode type
x = u ' Force '# Force a salvar como unicode

 

Uma vez introduzido

O tipo de sequência de caracteres e o conteúdo do arquivo de texto são todos compostos por caracteres, mas quando se trata de acesso a caracteres, a codificação de caracteres precisa ser considerada.

As características típicas do ponto de conhecimento da codificação de caracteres é que existem muitas teorias e poucas conclusões, mas para o desenvolvimento, você só precisa se lembrar das conclusões.Vamos apresentá-lo um pouco.

 

Duas reservas de conhecimento

2.1 Hardware de três núcleos

Todo o software está em cima do hardware em execução. Os três principais núcleos relacionados a software em execução são CPU, memória e disco rígido. Precisamos esclarecer três pontos

cópia de

# 1, antes da execução do software, o código do software e os dados relacionados são armazenados no disco rígido

 

# 2. A inicialização de qualquer software é ler dados do disco rígido na memória e, em seguida, a CPU pega as instruções da memória e executa

 

# 3. Os dados gerados durante a operação do software são armazenados pela primeira vez na memória.Se você deseja salvar permanentemente os dados gerados pelo software, é necessário gravar os dados da memória no disco rígido.

 

 

 

 

2.2 O processo de leitura do conteúdo do arquivo por um editor de texto

cópia de

#Phase 1. Inicie um editor de arquivos (editor de texto como nodepad ++, pycharm, word)

 

#Fase 2, o editor de arquivos lerá o conteúdo do arquivo do disco rígido na memória

 

#Fase 3, o editor de texto exibirá o conteúdo que acabou de ler na memória na tela

2.3 O fluxo do interpretador Python para executar o arquivo

Tome python test.py como exemplo, o processo de execução é o seguinte

cópia de

#Phase 1. Inicie o interpretador Python, que é equivalente a iniciar um editor de texto

 

#Fase 2, o interpretador Python é equivalente a um editor de texto, lendo o conteúdo de test.py do disco rígido na memória

 

#Fase 3, o intérprete Python interpreta e executa o conteúdo da memória que acabou de ler e começa a reconhecer a sintaxe do Python 

2.4 Resumo

As semelhanças e diferenças entre o interpretador Python e o editor de arquivos são as seguintes

cópia de

# 1, o mesmo ponto: os dois primeiros estágios são exatamente os mesmos, ambos lêem o conteúdo do arquivo no disco rígido na memória, conforme detalhado abaixo

O intérprete Python interpreta o conteúdo do arquivo de execução, portanto, o intérprete Python tem a função de ler arquivos py, que é o mesmo que o editor de texto.

 

2. Diferenças: No estágio 3, o conteúdo lido na memória é tratado de maneira diferente, conforme explicado em detalhes abaixo

Depois que o editor de texto lê o conteúdo do arquivo na memória, ele é para exibição ou edição e ignora a sintaxe do Python, e o interpretador Python lê o conteúdo do arquivo na memória, mas não para dar uma idéia do que o código Python grava. Mas para executar o código python e reconhecer a sintaxe python)

 

 

 

 

3. Introdução à codificação de caracteres

3.1 O que é codificação de caracteres?

Quando humanos interagem com computadores, eles usam caracteres que os humanos podem entender, como caracteres chineses, ingleses, japoneses etc.

O computador pode reconhecer apenas números binários, conforme detalhado abaixo

cópia de

#Números binários são números compostos de 0 e 1, como 010010101010. O computador é baseado no trabalho elétrico, e as características da eletricidade são níveis alto e baixo. Os seres humanos correspondem ao nível alto como o número 1 e o nível baixo como o número 0 do nível lógico. Isso determina diretamente que o computador pode reconhecer que é composto de 0 e 1. Número de

Não há dúvida de que, de caracteres humanos a números no computador, deve haver um processo, como a seguir

 

 

 

O processo de tradução deve se referir a um padrão específico, chamado de tabela de codificação de caracteres, e a correspondência individual entre caracteres e números é armazenada na tabela.

A codificação na codificação de caracteres refere-se ao significado de tradução ou conversão, ou seja, para traduzir caracteres que os humanos podem entender em números que podem ser reconhecidos por computadores

 

3.3 Codificação e decodificação

O processo de conversão de caracteres em unicode na memória e o processo de conversão de unicode em outra codificação é chamado codificação de codificação

O processo de conversão de unicode na memória para caracteres e de outras codificações em unicode é chamado decodificação decodificação

Em muitos tipos de arquivo, apenas a memória do arquivo de texto é composta de caracteres, portanto, o acesso ao arquivo de texto também envolve o problema da codificação de caracteres

 

 

3.4 A origem do UTF-8

Nota: Se o binário no formato GBK for salvo no disco rígido, os caracteres digitados pelo usuário poderão ser apenas chinês ou inglês.Se o formato binário salvo no disco rígido for o formato Shift_JIS, os caracteres digitados pelo usuário poderão ser apenas japonês ou inglês ... Os caracteres que inserimos contêm vários caracteres nacionais; então, como lidar com eles?

cópia de

#》 国 字 —√—》 Memória (binária no formato unicode) —— X— disk Disco rígido (binária no formato GBK)

 

#》 国 √ —√—》 Memória (binária no formato unicode) —— X— disk Disco rígido (binária no formato Shift_JIS)

 

#》 国 √ —√—》 Memória (binária no formato unicode) —— √— disk Disco rígido (binária no formato ???)

Em teoria, é possível armazenar o binário no formato unicode na memória diretamente no disco rígido, mas como o unicode usa fixamente dois bytes para armazenar um caractere, se o caractere multinacional contiver um grande número de caracteres em inglês, o armazenamento no formato unicode exigirá mais O dobro do espaço (na verdade, os caracteres em inglês precisam ser armazenados apenas em um byte), mas a ocupação do espaço não é o problema mais fatal.O mais fatal é que, quando gravamos da memória no disco rígido, isso leva duas vezes mais tempo. Quando o binário unicode na memória é gravado no disco rígido ou transmitido com base na rede, ele deve ser convertido em um formato simplificado, utf-8 (nome completo Unicode Transformation Format, que é o formato de conversão do unicode)

cópia de

# Caracteres multinacionais - √ - Memória (binário no formato unicode) --√— ”Disco rígido (binário no formato utf-8)

 

 

 

 

Então, por que não usar o utf-8 diretamente na memória?

cópia de

UTF-8 tem duração indefinida: um caractere inglês ocupa 1Bytes, um caractere chinês ocupa 3Bytes e caracteres raros são armazenados com mais bytes

 

Isso também significa que se os caracteres inseridos pelo usuário são: Olá, você precisa passar pelo processo de cálculo na memória: "você" deve usar 3Bytes, "y" deve usar 1Bytes, "bom" deve usar 3Bytes e, em seguida, pode ser armazenado, Portanto, se o formato UTF-8 for usado para armazenar caracteres diretamente na memória, o tempo total gasto = tempo de cálculo + tempo de armazenamento, e o formato unicode de comprimento fixo é usado para armazenar caracteres na memória, o que economiza o tempo de cálculo, então o unicode é usado na memória para Armazenar personagens desperdiçará espaço, mas aumentará a velocidade, este é um método de usar espaço por tempo

 

 

 

 

Aplicação de codificação de quatro caracteres

Aprendemos a codificação de caracteres para evitar caracteres ilegíveis ao acessar caracteres:

cópia de

# 1, o uso fixo do unicode na memória não será distorcido, independentemente dos caracteres digitados

 

# 2. O que podemos modificar é o método de codificação para salvar / recuperar o disco rígido.Se a configuração de codificação estiver incorreta, caracteres ilegíveis aparecerão. O problema ilegível é dividido em dois tipos: ilegível, ilegível

 

# 2.1 Confuso: se o conteúdo digitado pelo usuário contiver caracteres chineses e japoneses, se for simplesmente salvo em shift_JIS, os japoneses poderão ser gravados no disco rígido normalmente e, como os caracteres chineses não são encontrados em shift_jis, a correspondência será causada.

 

# 2.2 Desordenado: se os dados no disco rígido forem armazenados no formato shift_JIS, o formato GBK será usado para ler na memória

Resumo:

cópia de

# 1. Verifique se o armazenamento não está desordenado: ao gravar da memória no disco rígido, o formato de codificação deve ser definido como o formato de codificação que suporta os caracteres digitados

# 2. Verifique se o armazenamento não está desordenado: ao ler do disco rígido na memória, deve ser usado o mesmo formato de codificação que ao gravar no disco rígido

4.1 Editor de texto nodpad ++ para acessar arquivos de texto

O editor de texto acessa todos os arquivos de texto, e o conteúdo contido no arquivo de texto é composto por todos os caracteres; portanto, o acesso ao arquivo de texto envolve problemas de codificação de caracteres.

4.2 Os dois primeiros estágios do arquivo executado pelo interpretador Python

Os dois primeiros estágios da execução do arquivo py são o processo do interpretador python lendo o arquivo de texto e não há diferença entre os dois primeiros estágios da edição de texto ao ler o arquivo de texto. O método de codificação é definido no formato de codificação quando o arquivo foi originalmente gravado no disco rígido.Se não estiver definido, o interpretador Python usará o método de codificação padrão.O padrão é utf-8 em python3 e ASCII em python2. Cabeçalho do arquivo para modificar a codificação padrão

  • Escreva o seguinte conteúdo, incluindo # na primeira linha do arquivo

cópia de

# coding: o formato de codificação usado quando o arquivo foi gravado no disco rígido

O intérprete usará primeiro a codificação padrão para ler a primeira linha do arquivo.Como a primeira linha é composta de inglês puro, qualquer codificação pode reconhecer caracteres em inglês.

4.3 O terceiro estágio do arquivo executado pelo interpretador Python

A função de definir o cabeçalho do arquivo é garantir que os dois primeiros estágios da execução do programa python não sejam distorcidos.Depois dos dois primeiros estágios, o conteúdo do arquivo py será armazenado na memória no formato unicode.

Comece a reconhecer a gramática python ao passar para o terceiro estágio. Ao encontrar um nome gramatical específico = 'up' (o código em si é todo armazenado no formato unicode), é necessário solicitar espaço na memória para armazenar a string 'up'. Em seguida, envolve a questão de qual código deve ser armazenado no "on".

No Python3, os valores das strings são armazenados no formato unicode

Como a prevalência do Python2 é anterior ao unicode, no Python2, o valor do tipo de string é armazenado de acordo com a codificação especificada no cabeçalho do arquivo (se a codificação não for especificada no cabeçalho do arquivo, o intérprete seguirá sua própria codificação padrão. Armazenamento 'on'), portanto, isso pode causar problemas ilegíveis

cópia de

# coding: utf-8

x = '上' # O valor de x é binário no formato untf-8

print (x) # A operação de impressão deve fornecer o valor de x, ou seja, o binário no formato utf-8 ao terminal.Quando o terminal o recebe, não é unicode (apenas o unicode tem uma correspondência com caracteres), para que o terminal execute a operação: UTF-8 binário --- decodificação-> binário no formato unicode, o terminal do processo de decodificação usará sua própria codificação padrão e a codificação padrão do terminal no pycharm é utf-8, a codificação padrão do terminal cmd no windows é gbk, Portanto, a operação de impressão é exibida normalmente em pycharm, mas é distorcida em cmd sob as janelas

 

# O efeito da execução no cmd no Windows é o seguinte

C: \ Usuários \ Administrador> python2 E: \ aaa.py

Trickle

Um remédio foi introduzido após python2, ou seja, adicionar u antes do tipo de string forçará o tipo de string a ser armazenado em unicode, o que é consistente com python3, e o formato unicode pode ser enviado diretamente a qualquer terminal para impressão Os caracteres correspondentes não serão ilegíveis

cópia de

# coding: utf-8

x = u '上' # Mesmo se o cabeçalho do arquivo for utf-8, o valor de x ainda será armazenado como unicode 

 

 

 

 

4.4 Uso de codificação de string e decodificação de decodificação

cópia de

# 1, formato unicode ------ codificação codificada ------> outros formatos de codificação

>>> x = '上' # em python3 é salvo como unicode em '上'

>>> res = x.encode ('utf-8')

>>> res, type (res) # unicode é codificado no formato utf-8, e o resultado da codificação é do tipo bytes, que pode ser usado diretamente como binário

(b '\ xe4 \ xb8 \ x8a', <classe 'bytes'>)

 

# 2. Outros formatos de codificação ---- decodificar decodificar ----> formato unicode

>>> res.decode ('utf-8') 

' Up'

Acho que você gosta

Origin www.cnblogs.com/baozai168/p/12729027.html
Recomendado
Clasificación