PHP - Codificación WINDOWS-1252 al escribir fichero txt

 
Vista:

Codificación WINDOWS-1252 al escribir fichero txt

Publicado por Gary Host (4 intervenciones) el 28/03/2019 13:14:36
Hola a todos,
me está volviendo loco este tema.

Voy a simplificar el código porque hay consultas a base de datos y demás.

Tengo que escribir un txt desde php con codificación ANSI windows-1252.

Escribo todas las líneas correctamente, pero la última sólo contiene números y por algún motivo, al escribirla me lo guarda en UTF-8.

Si añado una línea al final con "á" por ejemplo, me lo guarda bien, pero si la quito o añado un caracter cualquiera sin tilde, vuelve a UTF-8.

Aquí el código que lo guarda en WINDOWS-1252:
1
2
3
4
5
6
7
8
9
10
11
<?php
$cabecera = "123456789   001280319280318\r\n123456789   001280319280318\r\n123456789   001280319280318\r\n";
 $archivo = fopen("archivo.txt", "w+b");
 fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", $cabecera));
 //begin foreach
 fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", "AQUÍ EL STRING"));
 //end foreach
$pie = "\r\n0000000000000000               0123456789123456789"\r\n123456789789789           123456789456123"\r\n";
         fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", $pie));
        fclose($archivo);
?>

Aquí el código que lo guarda en UTF-8:
1
2
3
4
5
6
7
8
9
10
11
$cabecera = "123456789   001280319280318\r\n123456789   001280319280318\r\n123456789   001280319280318\r\n";
 $archivo = fopen("archivo.txt", "w+b");
 fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", $cabecera));
 //begin foreach
 fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", "AQUÍ EL STRING"));
 //end foreach
$pie = "\r\n0000000000000000               0123456789123456789"\r\n123456789789789           123456789456123"\r\n";
         fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", $pie));
        fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", "á"));
        fclose($archivo);
?>


Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.627
Plata
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Codificación WINDOWS-1252 al escribir fichero txt

Publicado por Alejandro (664 intervenciones) el 28/03/2019 15:55:09
Por favor aclara la situación pues te estas contradiciendo.

"Escribo todas las líneas correctamente, pero la última sólo contiene números y por algún motivo, al escribirla me lo guarda en UTF-8.

Si añado una línea al final con "á" por ejemplo, me lo guarda bien, pero si la quito o añado un caracter cualquiera sin tilde, vuelve a UTF-8."

El código que mencionas que lo guarda en UTF-8 tiene:
1
fwrite($archivo, iconv("UTF-8", "WINDOWS-1252", "á"));

¿Tu script tiene las cabeceras de UTF-8?
¿El archivo de tu script esta codificado en UTF-8?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codificación WINDOWS-1252 al escribir fichero txt

Publicado por Gary Host (4 intervenciones) el 28/03/2019 22:29:02
Hola, gracias por responder.

Me explico:
tengo que almacenar el archivo en windows-1252.

Hasta donde entiendo en la documentación de PHP, iconv funciona así:
iconv("in_charset", "out_charset", "string")

Obtengo datos en UTF-8 en una aplicación codificada en UTF-8 y los grabo con iconv en el txt codificándolos en windows-1252.

Si inserto líneas con alguna letra con tildes, me respeta la codificación, pero la última línea siembre contiene sólo números y al insertarla, el fichero se graba en UTF-8.

El fin es insertar los datos y obtener un txt en windows-1252 para que cumpla la norma SEPA (remesas transferencias bancarias), me vale cualquier medio, volver a abrir el fichero y reescribirlo, convertirlo por otro método... pero tiene que ser en un solo paso para el usuario.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Codificación WINDOWS-1252 al escribir fichero txt

Publicado por Gary Host (4 intervenciones) el 29/03/2019 12:06:51
Ya lo solucioné.

Por si alguien tiene el mismo problema, era tan sencillo como codificarlo al definir el valor de la variable en lugar de al insertarlo.

No entiendo muy bien el motivo, pero si al tomar los datos lo codificas, se inserta correctamente.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar