Hay un cliente que quiere crear una versión rusa de su sitio web. Utilizo codificación UTF-8 para el front-end y el backend, pero la información estática rusa generada a través de la base de datos está confusa. Si se muestra usando GB2312, la información estática en ruso generada a través de la base de datos se muestra correctamente, pero el texto en ruso en el archivo de plantilla está confuso.
Las características específicas son las siguientes:
1. Aprenda el idioma ruso normal a través de plantillas.
2. La información rusa estática generada a través de la base de datos del backend se muestra normalmente en el backend pero confusa en el frontend.
3. El inglés es normal.
Expresiones similares o diferentes relacionadas con el tema.
FSO escribe archivos codificados en UTF-8
¿Cómo puede FSO generar archivos codificados en utf-8?
¿Cuál es el formato de codificación predeterminado de los archivos generados por FSO?
Cómo convertir a codificación UTF-8
Problema con FSO generando páginas web estáticas
El código para usar FSO para generar archivos en ASP es el siguiente:
Copie el código de código de la siguiente manera:
función crear archivo (snombre de archivo, scontent)
establecer fso=server.CreateObject("scripting.filesystemobject")
establecer f1=fso.opentextfile(snombredearchivo,2,verdadero,-1)
f1.write(contento)
f1.cerrar
establecer fso = nada
función final
fso.opentextfile(sfilename,2,true,-1) El último parámetro -1 especifica el formato de codificación como Unicode. Cuando el formato de codificación es Unicode, la página web muestra UTF-16 little-endian.
Método OpenTextFile
Crea el archivo especificado y devuelve un objeto TextStream, que se puede utilizar para leer o escribir el archivo creado.
objeto.OpenTextFile(nombre de archivo[, iomode[, crear[, formato]]])
Objeto de parámetro, obligatorio. Debe ser el nombre de un objeto FileSystemObjec o Carpeta. Esto es fso.
nombre de archivo, requerido. Una expresión de cadena que especifica el archivo que se va a crear. Aquí está el nombre del archivo.
iomode, parámetro opcional, indica si el archivo se usa para leer, escribir o agregar. El valor predeterminado es 1 para leer, 2 para escribir y 8 para agregar.
crear, parámetro opcional, si se debe crear el archivo si no existe, el valor predeterminado es falso, si desea crearlo, configúrelo en verdadero.
formato, el parámetro puede ser una de las siguientes configuraciones, el formato predeterminado es ASCII y no queremos ningún utf-8:
TristateUseDefault -2 abre el archivo en el formato predeterminado del sistema.
TristateTrue -1 abre el archivo en formato Unicode.
TristateFalse 0 Abre el archivo en formato ASCII.
Solo hay tres atributos de codificación de FSO. Los valores predeterminados del sistema son Unicode y ASCII, y no queremos ningún utf-8. Por lo tanto, los archivos generados mediante el uso de componentes FSO en sistemas chinos generalmente están en el formato de codificación gb2312.
Solución uno
La codificación GB2312 contiene letras rusas. Si la página está configurada en chino simplificado GB2312, el ruso se puede mostrar normalmente. Sin embargo, dado que el chino se muestra por defecto como "Song Ti", el ruso se mostrará como caracteres de ancho completo en "Song Ti". lo cual es feo, por lo que se deben utilizar fuentes extranjeras, como "New Rome" o "Arial", etc. Los clientes chinos pueden comunicarse allí, pero cuando los verdaderos rusos navegan por la web, necesitan descargar e instalar chino, lo cual no es ideal y puede llevar a que dejen de navegar por la web.
Solución 2
Debido a que ASP es un lenguaje antiguo, algunas de sus funciones tienen muy poca compatibilidad con UTF-8. FSO no admite la generación directa de archivos en formato UTF-8 porque no puede especificar el formato de archivo requerido. Por ejemplo, si desea generar un archivo en formato UTF-8, no puede utilizar el objeto Scripting.FileSystemObject de uso común. Debemos cambiar nuestra forma de pensar y utilizar Adodb.Stream. Así es como se implementan algunos programas de blogs actuales, como zblog.
La función del objeto Scripting.FileSystemObject para crear archivos es la siguiente:
FileSystemObject.CreateTextFile(nombre de archivo[,sobrescribir[,unicode]])
El atributo Unicode se describe así:
Opcional. Valor booleano que indica si se debe crear el archivo en formato de archivo Unicode o ASCII. Este valor es Verdadero si el archivo se crea en formato de archivo Unicode; Falso si el archivo se crea en formato de archivo ASCII. Si se omite esta sección, se supone que se crea un archivo ASCII.
Lamentablemente, no puede utilizar esta función para crear archivos en formato UTF-8.
Utilice el objeto ADODB.Stream; consulte el uso a continuación:
Copie el código de código de la siguiente manera:
Establecer objStream = Server.CreateObject("ADODB.Stream")
Con objStream
.Abierto
.Juego de caracteres = "utf-8"
.Posición = objStream.Tamaño
.WriteText=cadena
.SaveToFile server.mappath("/sitemap.xml"),2
.Cerca
Terminar con
Establecer objStream = Nada
Apéndice: Introducción a ASCII, Unicode y UTF-8
ASCII es un conjunto de caracteres que incluye letras inglesas mayúsculas y minúsculas, números, caracteres de control, etc. Está representado por un byte y oscila entre 0 y 127.
Dado que los caracteres representados por ASCII son muy limitados, cada país o región ha propuesto su propio conjunto de caracteres basado en esto. Por ejemplo, GB2312, que se usa ampliamente en China, proporciona codificación para caracteres chinos y está representado por dos bytes.
Estos conjuntos de caracteres son incompatibles entre sí y los mismos números pueden representar caracteres diferentes, lo que provoca problemas en el intercambio de información.
Unicode es un conjunto de caracteres que asigna todos los caracteres del mundo a un número único (punto de código), como el número 0x0041 correspondiente a la letra a. Unicode todavía está en desarrollo y contiene cada vez más caracteres.
Al almacenar caracteres representados por Unicode, se requiere un determinado método de codificación, como UCS-2, que utiliza dos bytes para representar caracteres codificados en Unicode. UTF-8 es otro método de codificación del juego de caracteres Unicode. Tiene una longitud variable, hasta 6 bytes, y los caracteres inferiores a 127 están representados por un byte. Tiene el mismo resultado que el juego de caracteres ASCII, por lo que tiene muchas ventajas. Buena compatibilidad, el texto en inglés con codificación ASCII se puede procesar como codificación UTF-8 sin modificaciones y se usa ampliamente.