Tenho estudado a codificação UTF-8 nos últimos dias e estou muito confuso, discutirei minhas opiniões com você. Bem-vindo para aprovar. A seguir estão meus pensamentos. Se houver algo errado, sinta-se à vontade para me esclarecer e me ajudar a apontar.
Digressões relacionadas:
1. Sistema operacional
O sistema de janelas é todo unicode internamente. Nomes de pastas, nomes de arquivos, etc. são todos Unicode e podem ser exibidos normalmente em qualquer sistema de idioma.
2. Método de entrada:
A saída do Microsoft Pinyin é Unicode e a saída do Smart ABC é chinês simplificado (portanto, o Smart ABC não pode ser usado em sistemas de chinês não simplificado e só pode digitar em inglês).
3. Área de texto da página web
A área de texto da página web é exibida em Unicode. Portanto, tudo o que você digitar será exibido. Mas algumas caixas de entrada feitas em flash não funcionarão.
4. Acesso2000
Os dados salvos no acesso são unicode e podem ser exibidos em qualquer sistema de linguagem.
Se alguns caracteres não forem normais quando visualizados na visualização de dados, é porque a fonte usada para exibição não é uma fonte Unicode.
Mude para a fonte Arial Unicode MS para exibir tudo. (acessar ajuda, pesquisar, inserir unicode, instruções estão disponíveis)
5. Palavra
Conversão entre chinês tradicional e chinês simplificado no Word Após a conversão de chinês simplificado para chinês tradicional, o código interno ainda é chinês simplificado.
6. ASP é internamente Unicode e todo o texto é armazenado em Unicode. Converta para o conjunto de caracteres especificado quando necessário.
Primeiro vamos tirar a conclusão:
<%@ codepage=936%>Chinês simplificado
<%@ codepage=950%>Chinês Tradicional
<%@ página de código=65001%>UTF-8
A página de código especifica a codificação na qual o IIS lê a string passada (envio de formulário, transmissão da barra de endereço, etc.).
Também especifica a codificação para a qual todas as variáveis de texto são convertidas de Unicode,
Também especifica a codificação para a qual os dados recuperados do banco de dados são convertidos de Unicode. (Observe isso, é muito importante.)
Palavras-chave:
Leitura: Uma string, se lida em chinês simplificado serão alguns caracteres, se for lida em chinês tradicional serão alguns caracteres, a codificação da string em si não mudou.
Conversão: O sistema converte ativamente, por exemplo, do caractere "化" do Unicode para o caractere "化" do Big5, o código interno torna-se o do Big5. Se não houver palavra correspondente em Big5, o formato Unicode será mantido (&#xxxx;)
Chinês simplificado: seis conclusões
Forma hexadecimal Unicode: seis conclusões
Forma decimal Unicode: seis conclusões
A seguir está o processo de conversão de codificação que especulei:
Cliente: método de entrada Unicode - caixa de entrada unicode - converte de Unicode para a codificação correspondente por charset () - codificação de envio de formulário
Lado do servidor: o IIS decodifica o formulário - lê de acordo com a codificação especificada pela página de códigos - converte para o Unicode correspondente - pode ser lido com request("") - executa algum processamento - salva no banco de dados na codificação Unicode
Lado do servidor: Leia os dados Unicode do banco de dados e converta-os para a codificação especificada pela página de código --- gere o código-fonte -- o IE os lê e exibe de acordo com o conjunto de caracteres.
Aqui estão alguns exemplos:
Exemplo 1:
Suponha que existam três páginas asp, uma página de mensagem típica:
1.write.asp é um formulário de entrada simples e é enviado para add.asp.
<META http-equiv="Content-Type" content="text/html; charset=big5">
2.add.asp recebe mensagens e as salva no banco de dados
<%@página de código=936%>
3.read.asp obtém mensagens do banco de dados e as exibe.
<%@codepage=936%> charset=GB2312 ou
<%@codepage=950%> conjunto de caracteres=big5
Você pode adivinhar. Usei o método de entrada Microsoft Pinyin para inserir "Hua Liu Discussion" em write.asp. O que será exibido em read.asp no final?
Você está tonto? Vamos analisar desde o início.
Exemplo 2:
O que acontecerá se alterarmos <%@ codepage=936%> em add.asp no Exemplo 1 para <%@ codepage=950%>?
O que você encontrou aqui?
1. Se o texto de entrada for diferente do Charset correspondente, uma vez convertido, os caracteres no formato Unicode poderão aparecer. Aqui está o porquê. Todo o processo é mantido a partir de agora.
2. A página de código em Add.asp determina o texto salvo no banco de dados e qual idioma corresponde ao Unicode. Por exemplo, codepage=936,
Em seguida, o banco de dados salva o Unicode Chinês Simplificado (o banco de dados recupera o sistema Chinês Simplificado, tudo está normal),
Codepage=950 salva o Unicode do chinês tradicional (seria errado recuperar o sistema do chinês simplificado).
3. Preste atenção ao processo de mudança da string:
1) Método de entrada --- CharsetUnicode ---- especifica o mapeamento do conjunto de caracteres
2) Charset ---- codificação de string de codificação simples
3) O processo inverso da etapa anterior de decodificação do formulário, as duas etapas são compensadas.
4) A string à pressione codepage para ler a string e a string não foi alterada. Esta etapa pode causar "mal-entendido de leitura".
5) Converter para o conjunto de caracteres especificado da página de código Unicode correspondente ---- mapeamento Unicode
6) Processamento intermediário, sem alteração no banco de dados, inserido diretamente no formato Unicode
7) Pressione codepage para ler o banco de dados Unicode ---- mapeamento do conjunto de caracteres especificado da codepage
8) Mostra que a string lida do conjunto de caracteres especificado por Charset não foi alterada.
Vamos ilustrar com o exemplo 1:
Exemplo 2:
Tonto. Agora vamos colocar o conhecimento em prática.
Caso 1.
O código que funciona bem no sistema chinês simplificado fica distorcido no banco de dados quando colocado em um espaço estrangeiro, e os dados originais também ficam distorcidos.
Análise: Como a maioria das pessoas costuma usar o sistema chinês simplificado, a página de código padrão = 936, então não importa se nem todos escrevem.
Mas quando vamos para o estrangeiro surgem problemas de espaço. O Unicode no banco de dados foi convertido para a codificação em inglês, portanto, depois que o chinês simplificado original no banco de dados for convertido para o inglês, a exibição de GB ficará naturalmente distorcida.
Conforme mostrado na imagem, o texto recém-inserido é exibido normalmente, mas o Unicode em inglês é salvo no banco de dados.
Solução: adicione <%@codepage=936%> a todos.
Todo o processo envolve apenas a conversão entre o chinês simplificado e o Unicode correspondente.
Caso 2:
O que devo fazer se quiser converter códigos e dados em chinês simplificado para a versão completa em chinês tradicional?
Análise: 1. A codificação de todos os arquivos de código é alterada para Big5 e o próprio arquivo é salvo em chinês tradicional.
2. <%@página de código=936%>
3.Conjunto de caracteres=big5
4. A versão de acesso não importa, pois os dados de acesso são Unicode.
5. Ok, o código pode ser executado no sistema chinês tradicional puro.
6. Questões restantes: Haverá alguns pontos de interrogação ao ler os dados originais em chinês simplificado. O efeito é o mesmo da leitura de 950 no Exemplo 1, display big5. Como o Unicode do Chinês Simplificado é convertido em Chinês Tradicional, alguns caracteres não estão em Chinês Tradicional, portanto, aparecerão pontos de interrogação.
7. Solução: Use uma página asp temporária, codepage=65001, leia-a como Unicode em chinês simplificado, use uma função Unicode->Big5 para convertê-la para chinês tradicional e, em seguida, grave-a de volta no banco de dados.
Os dois casos foram totalmente deduzidos por mim com base na teoria e não foram confirmados.
Críticas e correções são bem-vindas caso você tenha experiências semelhantes.