Aprende a escribir un archivo de texto sin formato en PHP con la codificación Western Windows 1252.


La función fwrite de PHP o file_put_content no se preocupa por los metadatos del archivo, simplemente escribe los datos dados en el almacenamiento y eso es todo. Esto lleva a una simple conjetura, el juego de caracteres del archivo de texto está definido por sus datos, por lo que debe convertir los datos que escribirá en el archivo a un formato específico.

En algunas empresas, este proceso es necesario ya que el software de otras grandes empresas está desactualizado y no funciona bien con la codificación predeterminada UTF-8, por lo que deberá cambiar obligatoriamente la codificación de sus archivos generados a la denominada " Codificación ANSI ". El término "ANSI" cuando se aplica a las páginas de códigos de 8 bits de Microsoft es un nombre inapropiado. Se basaron en borradores enviados para la estandarización ANSI, pero ANSI nunca los estandarizó. Windows-1252 (la página de códigos más comúnmente conocida como "ANSI") es similar a ISO 8859-1 (Latin-1), excepto que Windows-1252 tiene caracteres imprimibles en el rango 0x80..0x9F, donde ISO 8859-1 tiene personajes de control en ese rango. Unicode también tiene caracteres de control en ese rango.

En PHP, puede lograrlo usando la función iconv, tratando de detectar la codificación de sus datos (generalmente UTF-8) y convertirlos al nuevo formato, a saber, Windows-1252 (CP1252):

<?php

// Almacena tu texto original en alguna variable
$data = "Los señores del pueblo de alli comen sopa con cucharas.";

// Cambie la codificación del archivo usando iconv
$string_encoded = iconv( mb_detect_encoding( $data ), 'Windows-1252//TRANSLIT', $data );

// Escribir archivo
$file = fopen("my_text_file.txt", "w+");
fwrite($file, $string_encoded);
fclose($file);

El archivo de salida será reconocido automáticamente por su editor de texto favorito con la codificación Windows-1252:

Windows 1252 Text PHP

Y eso es todo, normalmente. Si el contenido de sus archivos no tiene caracteres especiales, el editor de texto puede reconocer el contenido como UTF-8, por lo que su única opción será utilizar una herramienta CLI para convertir la codificación del archivo (lea el siguiente párrafo) .

Si el archivo aún no tiene la codificación correcta

Si después de usar PHP simple para escribir el contenido manualmente en su archivo no usa la codificación deseada en el contenido del archivo, es posible que deba usar en su lugar la forma de nivel de sistema para configurar la codificación del archivo .

La forma preferida y más fácil de hacerlo usando la CLI es con iconv. Esta herramienta CLI convierte la codificación de caracteres en el archivo de entrada de un juego de caracteres codificados a otro. El resultado se escribe en la salida estándar a menos que la opción --output especifique lo contrario o simplemente una redirección de salida con el cli, por ejemplo:

iconv -t CP1252 -f UTF-8 "input_file.txt" > "encoded_output_file.txt"

Puede usar la función exec de PHP para ejecutar el programa iconv con los argumentos mencionados, disponible en todos los sistemas operativos basados ​​en UNIX o en Windows ( usando Cygwin ).

Como se mencionó, la mayoría de los editores de texto que usan el detector de codificación automático deciden qué codificación usar de acuerdo con el contenido, por lo que normalmente, aunque las cadenas almacenadas en el archivo con PHP tienen la codificación Windows-1252 (CP1252), la UTF-8 se utilizará el modo. Esto significa que la detección de la codificación basada en el contenido se basa solo en la heurística, por lo que no garantiza que la codificación utilizada para abrir el archivo sea correcta.

Sin embargo, el contenido no miente, por lo que si intenta abrir el contenido de un archivo codificado en Windows-1252 con la codificación UTF-8, verá caracteres extraños en el editor de texto:

Windows1252 (CP1252) text opened with UTF-8

Sin embargo, si el editor de texto lee el contenido del archivo con la codificación Windows-1252 (CP1252), se leerá correctamente:

Windows 1252 (CP1252) opened with correct encoding

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores