....
Ahora bien ... la conversión es simple, si sabes exactamente la codificación del texto original. Te voy a poner varios ejemplos, porque no tengo el archivo original que estas usando y no puedo saber si exactamente está en la codificación que mencionas.
Yo hice tres archivos, uno en ANSI, otro en UTF-8 sin BOM, y otro en UTF-16 (UCS-2 Little Endian en su defecto) pero ... ¿Como sé realmente y ciertamente que estan en esa codificación?
Primero usé un programa que me permite convertir y que funcione bien como Notepad++. Seguidamente copie el mismo texto en los 3 archivos y los volví a guardar. El texto que usé de prueba fué:
TEXTO
ÁÉÍÓÚÑáéíóúñ
Al mostrar la lista de archivos con 'dir', cada archivo tiene un tamaño diferente aunque tienen exactamente las mismas 'letras'.
Código:
05/03/2010 12:09 p.m. 19 ascii.txt
05/03/2010 12:10 p.m. 40 utf16.txt
05/03/2010 12:09 p.m. 31 utf8.txt
- ASCII tiene 19 bytes, porque cada letra ocupa 1 byte y hay 19 letras (2 son los retornos de carro \r\n).
- UTF-8 tiene 31 bytes, porque cada letra ocupa 2 bytes; menos la palabra TEXTO que ocupa 1 byte por letra, porque están en el rango de los primeros 127 caracteres de la tabla ASCII, (mas los 2 bytes \r\n).
- UTF-16 tiene 40 bytes, porque cada letra ocupa 2 bytes inclusive la palabra TEXTO y los 4 de retorno de carro y nueva línea y 2 bytes extra ¿firma BOM, algo del UCS2?.
Ahora ... convirtiendo ...
Código PHP:
<?php
$filename = 'utf16.txt';
$fh = fopen($filename, 'r');
$cons = fread($fh, filesize($filename));
fclose($fh);
$cons = mb_convert_encoding($cons, "ISO-8859-1", "UTF-16LE");
$filename = 'salida.txt';
$fh = fopen($filename, 'w');
fwrite($fh, $cons);
fclose($fh);
?>
La salida que se obtiene es esta:
Código:
05/03/2010 12:09 p.m. 19 ascii.txt
05/03/2010 12:33 p.m. 20 salida.txt
05/03/2010 12:10 p.m. 40 utf16.txt
05/03/2010 12:09 p.m. 31 utf8.txt
Y en salida.txt tengo 20 bytes, 1 byte de mas ¿?.
Si los comparo en binario obtengo, todos los bytes se corrieron 1 porque la conversión metió un byte más.
Código:
Comparando archivos ascii.txt y SALIDA.TXT
00000000: 54 3F
00000001: 45 54
00000002: 58 45
00000003: 54 58
00000004: 4F 54
00000005: 0D 4F
00000006: 0A 0D
00000007: C1 0A
00000008: C9 C1
00000009: CD C9
0000000A: D3 CD
0000000B: DA D3
0000000C: D1 DA
0000000D: E1 D1
0000000E: E9 E1
0000000F: ED E9
00000010: F3 ED
00000011: FA F3
00000012: F1 FA
FC: SALIDA.TXT es mayor que ascii.txt
Y en texto:
Se miran caracteres ráros porque lo copié de la consola, para que se pueda observar claramente el ejemplo.
Código:
Comparando archivos ascii.txt y SALIDA.TXT
***** ascii.txt
TEXTO
┴╔═Ë┌ÐßÚݾ·±
***** SALIDA.TXT
?TEXTO
┴╔═Ë┌ÐßÚݾ·±
*****
Por lo tanto los archivos son iguales, la conversión se realizó con éxito.
(NO se realizo perfectamente porque no estoy usando UTF-16 sino UCS-2 y me sobró 1 byte al inicio)
Continua ...