Há um cliente que deseja fazer uma versão em russo de seu site. Eu uso a codificação UTF-8 para front-end e back-end, mas as informações estáticas em russo geradas por meio do banco de dados estão distorcidas. Se exibidas usando GB2312, as informações estáticas em russo geradas por meio do banco de dados serão exibidas corretamente, mas o texto em russo no arquivo de modelo ficará distorcido.
As características específicas são as seguintes:
1. Perceba o idioma russo normal por meio de modelos.
2. As informações estáticas em russo geradas por meio do banco de dados backend são exibidas normalmente no backend, mas distorcidas no frontend.
3. Inglês é normal.
Expressões semelhantes ou diferentes relacionadas ao tema
FSO grava arquivos codificados em UTF-8
Como o FSO pode gerar arquivos codificados em utf-8?
Qual é o formato de codificação padrão dos arquivos gerados pelo FSO?
Como converter para codificação UTF-8
Problema com o FSO gerando páginas da web estáticas
O código para usar o FSO para gerar arquivos em ASP é o seguinte:
Copie o código do código da seguinte forma:
função criararquivo(snomedoarquivo,scontent)
definir fso=server.CreateObject("scripting.filesystemobject")
definir f1=fso.opentextfile(sfilename,2,true,-1)
f1.write(sconteúdo)
f1.fechar
definir fso = nada
função final
fso.opentextfile(sfilename,2,true,-1) O último parâmetro -1 especifica o formato de codificação como Unicode. Quando o formato de codificação é Unicode, a página da web exibe UTF-16 little-endian.
Método OpenTextFile
Cria o arquivo especificado e retorna um objeto TextStream, que pode ser usado para ler ou gravar o arquivo criado.
object.OpenTextFile(nome do arquivo[, iomode[, criar[, formato]]])
Objeto de parâmetro, obrigatório. Deve ser o nome de um objeto FileSystemObjec ou Folder. Isso é assim.
nome do arquivo, obrigatório. Uma expressão de string que especifica o arquivo a ser criado. Aqui está o nome do arquivo.
iomode, parâmetro opcional, indica se o arquivo é usado para leitura, gravação ou acréscimo. O valor padrão é 1 para leitura, 2 para gravação e 8 para acréscimo.
create, parâmetro opcional, se deseja criar o arquivo caso ele não exista, o padrão é false, se desejar criá-lo configure-o como true.
formato, o parâmetro pode ser uma das seguintes configurações, o padrão é o formato ASCII e não há utf-8 que desejamos:
TristateUseDefault -2 abre o arquivo no formato padrão do sistema.
TristateTrue -1 abre o arquivo no formato Unicode.
TristateFalse 0 Abra o arquivo no formato ASCII.
Existem apenas três atributos de codificação do FSO. Os padrões do sistema são Unicode e ASCII e não há nenhum utf-8 que desejamos. Portanto, os arquivos gerados usando componentes FSO em sistemas chineses geralmente estão no formato de codificação gb2312.
Solução um
A codificação GB2312 contém letras russas. Se a página estiver definida como chinês simplificado GB2312, o russo poderá ser exibido normalmente. No entanto, como o padrão chinês é a exibição "Song Ti", o russo será exibido como caracteres de largura total em "Song Ti". o que é feio, então fontes estrangeiras devem ser usadas, como "New Rome" ou "Arial" etc. Os clientes chineses podem se comunicar lá, mas quando os verdadeiros russos navegam na web, eles precisam baixar e instalar o chinês, o que não é o ideal e pode levar à desistência de navegar na web.
Solução 2
Como ASP é uma linguagem antiga, alguns de seus recursos têm suporte muito fraco para UTF-8. O FSO não oferece suporte à geração direta de arquivos no formato UTF-8 porque não pode especificar o formato de arquivo necessário. Por exemplo, se desejar gerar um arquivo no formato UTF-8, não será possível usar o objeto Scripting.FileSystemObject comumente usado. Devemos mudar nosso pensamento e usar o Adodb.Stream. É assim que alguns programas de blog atuais são implementados, como o zblog.
A função do objeto Scripting.FileSystemObject para criar arquivos é a seguinte:
FileSystemObject.CreateTextFile(nome do arquivo[,substituir[,unicode]])
O atributo unicode é descrito assim:
Opcional. Valor booleano que indica se o arquivo deve ser criado no formato Unicode ou ASCII. Este valor será True se o arquivo for criado no formato de arquivo Unicode; False se o arquivo for criado no formato de arquivo ASCII. Se esta seção for omitida, presume-se que um arquivo ASCII foi criado.
Infelizmente, você não pode usar esta função para criar arquivos no formato UTF-8.
Use o objeto ADODB.Stream, veja abaixo para uso:
Copie o código do código da seguinte forma:
Definir objStream = Server.CreateObject("ADODB.Stream")
Com objStream
.Abrir
.Charset = "utf-8"
.Posição = objStream.Size
.WriteText=str
.SaveToFile server.mappath("/sitemap.xml"),2
.Fechar
Terminar com
Definir objStream = Nada
Apêndice: Introdução ao ASCII, Unicode e UTF-8
ASCII é um conjunto de caracteres que inclui letras inglesas maiúsculas e minúsculas, números, caracteres de controle, etc. É representado por um byte e varia de 0 a 127.
Como os caracteres representados por ASCII são muito limitados, cada país ou região propôs seu próprio conjunto de caracteres com base nisso. Por exemplo, GB2312, que é amplamente utilizado na China, fornece codificação para caracteres chineses e é representado por dois bytes.
Esses conjuntos de caracteres são incompatíveis entre si e os mesmos números podem representar caracteres diferentes, causando problemas na troca de informações.
Unicode é um conjunto de caracteres que mapeia todos os caracteres do mundo para um número único (ponto de código), como o número 0x0041 correspondente à letra a. O Unicode ainda está em desenvolvimento e contém cada vez mais caracteres.
Ao armazenar caracteres representados por Unicode, é necessário um determinado método de codificação, como UCS-2, que usa dois bytes para representar caracteres codificados em Unicode. UTF-8 é outro método de codificação do conjunto de caracteres Unicode. Tem comprimento variável, até 6 bytes, e caracteres menores que 127 são representados por um byte. Tem o mesmo resultado que o conjunto de caracteres ASCII, portanto tem muito. boa compatibilidade, texto em inglês na codificação ASCII pode ser processado como codificação UTF-8 sem modificação e é amplamente utilizado.