por un momento le he echado un ojo a las codificaciones estándares esas que me has pasado y crei toparme con la codificación de los binarios. Hablo de la
Windows-1252 ó CP-1252, una codificación del alfabeto latino que DOS y Windows trata, parece también ser Occidental.
Pues entonces, me dediqué a correr la sentencia SQL que me aconsejaste:
Using sql Syntax Highlighting
SET client_encoding TO 'value';
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
pero no resultó, pues por empezar me devolvía el siguiente error:
Invalid value for parameter 'client_encoding' donde
value puse 'WIN1252', tal cual pone en
ésta tabla de conjunto de caracteres (aunque en la parte superior del sitio veo que parece que se trata de la versión 8.1 de PostgreSQL y luego vi que
aquel enlace que tu me dejaste era para la 8.0 pero siendo sincero desconozco la version, deberia de hacer la consulta a la base, si mal no entiendo, ¿cierto? Porque parece que hay diferencias en las tablas de ambas versiones
), también probé poniendo 'WINDOWS-1252' y 'CP1252' pero ¡¡seguía devolviendo el mismo error!! Es entonces que me digné a consultar con
Using sql Syntax Highlighting
SHOW client_encoding
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
y esto me devolvió lo que parece es la codificación cliente (no servidor) de la base actual donde hago la consulta:
SQL_ASCII. Traté de cambiarla con
SET client_encoding TO 'UTF8' para ver si conseguía algo, pero nada, al volver a consultar con
SHOW client_encoding, otra vez:
SQL_ASCII.
Es entonces donde me di por vencido porque me veía medio perdido y estaba en lo erróneo al creer que esa era la codificación cuando enrealidad NO era el caso.
No obstante, me apunte la siguiente aclaración, por si en algún futuro la llego a prescindir, que hace en ese sitio sobre SQL_ASCII.
La dejo a continuación:
"The SQL_ASCII setting behaves considerably differently from the other settings. When the server character set is SQL_ASCII, the server interprets byte values 0-127 according to the ASCII standard, while byte values 128-255 are taken as uninterpreted characters. No encoding conversion will be done when the setting is SQL_ASCII. Thus, this setting is not so much a declaration that a specific encoding is in use, as a declaration of ignorance about the encoding. In most cases, if you are working with any non-ASCII data, it is unwise to use the SQL_ASCII setting, because PostgreSQL will be unable to help you by converting or validating non-ASCII characters."
Volviendo a los binarios y ya mirando para otro lado, notaba que al hacer el reemplazo de bytes en los mismos (aquellos que estaban dentro del rango 0x80-0xFF), todavía me restaban otros que, viendo el binario volcando en hexadecimal, llevaban la secuencia
EF BF BD (los 3 consecutivos) para representar un 'Unicode block' y si pasaba ese binario a UTF-8 veía un "
mojibake", es decir, si contaba con la siguiente secuencia en hexadecimal:
0x66 0xEF 0xBF 0xBD 0x72, desde un editor de texto como el
gedit veía f
�r, donde el primer y último carácter se logra representar correctamente pero no así los 3 dentro.
Y volviendo a
Wikipedia,
"La secuencia EF BF BD es representada por los caracteres � por tratarse de caracteres ilegales para el UTF8, es decir no están dentro del rango de los 0x00–0x7F "
El punto es... que parece que en donde están estos últimos hexadecimales (los que se encuentran contiguos: EF BF BD) se pierde el byte original que debe ser mostrado. Con esto me refiero a que en TODO lugar dónde se encuentren estos bytes consecutivos puede haber tanto una 'á' cómo una 'é', una 'í', un camello, un delfín o lo que fuere, pero SE DESCONOCE. Me explico:
En el siguiente fragmento ('
Cay Rodr...guez'), donde hay puntos debe haber una '
í'(acentuada)
00001100 43 61 79 20 52 6f 64
72 ef bf bd 67 75 65 7a 20 |Cay Rodr...guez |
0x
72 es una
r0x
EF 0x
BF 0x
BD0x
67 es una
gY en éste otro '
n Formaci...n|20' una '
ó'(también acentuada)
00004940 6e 20 46 6f 72 6d 61 63
69 ef bf bd 6e 7c 32 30 |n Formaci...n|20|
0x
69 es una
i0x
EF 0x
BF 0x
BD0x
6e es una
nPero no hay rastro alguno, ni un byte antes ni después del que fiarme para poder hacer el reemplazo a como debo.
Agradezco de tu paciencia, explorer, y la de cualquier otro usuario que me esté leyendo para brindarme una mano.