Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 6768|Respuesta: 0

La lista de materiales del problema de codificación UTF-8 se describe en detalle

[Copiar enlace]
Publicado en 30/10/2014 17:38:44 | | |
Problemas de LISTAS UTF-8 a tener en cuenta en WordPress
Me encontré con un problema muy pronto, es decir, después de instalar un plugin concreto, aparecía una pantalla blanca al hacer clic para activar. Nunca he descubierto cuál es la razón, y la solución anterior es que si no contiene caracteres chinos, transfiera directamente el archivo a código ASCII, lo cual generalmente se puede solucionar. Cuando hoy le compré un blog a mi hermano, esta situación volvió a ocurrir. Después de investigar durante mucho tiempo, finalmente encontré la respuesta.

Existe un concepto de BOM en la especificación Unicode. BOM - Byte Order Mark, que es la marca de byte order. Encuentra una nota sobre la lista de materiales aquí:

En el código UCS hay un carácter llamado "ZERO WIDTH NO-BREAK SPACE", que se codifica como FEFF. FFFE es un personaje inexistente en UCS, así que no debería aparecer en la transmisión real. La especificación UCS recomienda transferir el carácter "ZERO WIDTH NO-BREAK SPACE" antes de transmitir el flujo de bytes. De este modo, si el receptor recibe un FEFF, indica que el flujo de bytes es Big-Endian; Si se recibe FFFE, indica que el flujo de bytes es Little-Endian. Por lo tanto, el carácter "ZERO WIDTH NO-BREAK SPACE" también se denomina BOM.

UTF-8 no requiere una lista de materiales para indicar el orden de bytes, pero puede usar una lista de materiales para indicar cómo se codifica. La codificación UTF-8 del carácter "ZERO WIDTH NO-BREAK SPACE" es EF BB BF. Así que si el receptor recibe un flujo de bytes que empieza con EF BB BF, saben que es codificación UTF-8.

Windows utiliza la lista de materiales para marcar cómo se codifican los archivos de texto.

Además, la lista de preguntas frecuentes en la web de Unicode explica la lista de materiales en detalle. La autoridad natural oficial, pero en inglés, parece ser más laboriosa.

En un archivo codificado en UTF-8, la lista de materiales ocupa tres bytes. Si usas Notepad para guardar un archivo de texto como codificación UTF-8, abre el archivo con UE y cambia al estado de edición hexadecimal para ver el FFFE al principio. Esta es una buena forma de identificar archivos codificados en UTF-8; el software utiliza la lista de materiales para determinar si el archivo está codificado en UTF-8, y muchos programas también requieren que el archivo importado tenga una lista de materiales (BOM). Sin embargo, todavía hay mucho software que no reconoce la lista de materiales (BOM). Cuando investigaba sobre Firefox, sabía que en las primeras versiones de Firefox las extensiones no podían tener una lista de materiales (BOM), pero Firefox 1.5 y versiones posteriores han empezado a soportar la lista de materiales (BOM). Ahora he descubierto que PHP tampoco soporta BOM.

PHP fue diseñado sin considerar la lista de materiales (BOM), lo que significa que no ignora los tres caracteres de la LORO al principio del archivo codificado en UTF-8. Ya que debe estar en
Como vi en la wiki de Bo-Blog, Bo-Blog, que también utiliza PHP, también está preocupado por BOM. Se menciona otro problema: "Debido a la limitación del mecanismo de envío de COOKIES, en los archivos que ya tienen una lista de materiales al principio de estos archivos, no se pueden enviar COOKIES (porque PHP ya ha enviado la cabecera del archivo antes de que se envíe la COOKIE), por lo que las funciones de inicio de sesión y cierre de sesión son inválidas. Todas las funciones que dependen de COOKIES y SESIONES son inválidas. Esta debería ser la razón de la página en blanco en el fondo de WordPress, porque cualquiera de los archivos ejecutados contiene una lista de materiales y los tres caracteres se enviarán a la pantalla, haciendo que la funcionalidad que depende de cookies y sesiones falle.

La solución es guardar el archivo como código ASCII si solo contiene caracteres en inglés (o caracteres en codificación ASCII). Si usas un editor como UE, haz clic en File->Convert->UTF-8 a ASCII, o selecciona codificación ASCII en Guardar como. Si termina una línea en formato DOS, puedes abrirla con el Bloc de Notas, hacer clic en Guardar como y seleccionar codificación ASCII. Si contiene caracteres chinos, puedes usar la función de guardar como de UE y seleccionar "UTF-8 no BOM". Por favor, consulta la imagen de abajo:

Según las instrucciones de la wiki de Bo-Blog: Editplus debe guardarse como gb y luego como UTF-8. Sin embargo, ten cuidado al hacer esto, todos los caracteres que no estén incluidos en la codificación GBK se perderán. Si hay caracteres no chinos en el archivo, no uses este método. (Desde este pequeño aspecto, UE - UltraEdite-32 es efectivamente mucho mejor que Editplus, Editplus es demasiado ligero)

Otra forma que he encontrado es usar el editor de archivos que proporciona Wordpress. Este método no está limitado, y no es necesario descargar un editor especial, al fin y al cabo, todo el mundo usa Wordpress. Primero, activa el permiso de escritura del archivo que quieres editar en ftp, luego introduce el editor de archivos de gestión > > de WordPress, introduce la ruta para editar el archivo y haz clic en Editar archivo. No podrás ver los tres primeros caracteres que aparecen en la pantalla de edición, pero no pasa nada, coloca el cursor antes del primer carácter de todo el archivo y pulsa la tecla Retroceso. Vale, haz clic en Actualizar archivo, refresca en ftp, puedes ver que el archivo es 3 bytes más pequeño y listo.

Por último, esto es un gran problema: para todos aquellos que quieren escribir sus propios plugins, editar los plugins de otros para su propio uso y necesitan modificar la plantilla (esto se estima que es necesario para todos), es mejor entender el conocimiento anterior para no sentirse abrumados cuando surja un problema.





Anterior:¡Mira a los alumnos de primaria jugar a LOL y matar todo en segundos! (Último jugador original)
Próximo:Luo Yonghao respondió que "los teléfonos móviles de martillaje por debajo de 2500 son nietos"
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com