Re: Encoding caracter º

From: Gunnar Wolf <gwolf(at)gwolf(dot)org>
To: Conrado Blasetti <conrado(at)mapfre(dot)com(dot)ar>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Encoding caracter º
Date: 2009-01-29 17:45:35
Message-ID: 20090129174535.GB32711@cajita.gateway.2wire.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Conrado Blasetti dijo [Thu, Jan 29, 2009 at 01:08:45PM -0200]:
> Gente, nuevamente.
> Estoy importando un plano donde un tengo un carácter "º", bien, la
> bd está en encoding UTF8, cuando importo me arroja este error:
>
> ERROR: invalid byte sequence for encoding "UTF8": 0xba
> HINT: This error can also happen if the byte sequence does not
> match the encoding expected by the server, which is controlled by
> "client_encoding".
> CONTEXT: COPY alumnos_datos_familia, line 23

Acá el mensaje te da la respuesta completita (y me ahorro citar el
resto). Cada elemento donde toques tus datos tiene que estar
consciente de la codificación que usa, y hacérselo saber a los
demás. ¿Qué significa esto?

- Usaste UTF8 para la base de datos. Eso es maravilloso: Puedes
guardar el caracter que se te ocurra sin ningún problema. NO cambies
esto.

- Pero hay un programa que tiene que hablar con la BD, que sólo se
encarga de guardar y entregar los datos. No mencionas qué estás
usando (asumamos que es el psql). Esta aplicación habla con la BD a
través de un canal, y ambos extremos del canal deben usar la misma
codificación. No, esto no significa que tu aplicación requiera ser
también UTF (aunque entre más homogeneo sea tu entorno menos broncas
tendrás). Pero bueno, si el encoding de tu sistema es win866, el
«set client_encoding to 'WIN866'» es lo mejor.

- Por último, tu aplicación tiene que leer el archivo en cuestión, y
este archivo tiene también su propia codificación. Y tu aplicación
tiene que estar consciente de ello - o debes cambiar la codificación
de tu archivo para que concuerde.

Ahora, algo que debes recordar para todas las codificaciones a
excepción de las Unicode (UTF8, UTF16, UTF32, UCS4): No todos los
caracteres son representables en todas las codificaciones. Digo esto
porque me llama la atención la codificación que usas:

http://en.wikipedia.org/wiki/Code_page_866

CP866 is a Cyrillic code page to be used with MS-DOS. It is based
on the "alternative character set" of GOST 19768-87. The code was
widely used during MS-DOS era because it preserves the
pseudographic symbols (unlike Windows-1251) and maintains
alphabetical order of (non-contiguous) Cyrillic letters (unlike KOI8-R).

Ahora, ¿por qué estás viendo un ║ donde quieres un º? Bueno, asómate a
la página donde está la codificación pre-UTF más común en el mundo de
idiomas europeo-occidentales:

http://en.wikipedia.org/wiki/ISO/IEC_8859-1

El caracter 186 en ISO 8859-1 es º, y el mismo caracter en CP866 es
║. Claro, en Unicode son caracteres diferentes (U+00BA y U+2551
respectivamente). Tu base de datos seguramente contiene ║, porque
partió del supuesto que la aplicación estaba hablando en CP866.

¿Qué debes hacer? Importar la información con la codificación correcta
:)

Saludos,

--
Gunnar Wolf - gwolf(at)gwolf(dot)org - (+52-55)5623-0154 / 1451-2244
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973 F800 D80E F35A 8BB5 27AF

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Antonio Galicia 2009-01-29 17:46:01 Re: COPY FROM con Comillas dobles
Previous Message I.N.T. - Programación 2009-01-29 17:23:02 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Agrupar una consulta con selección del primer elemento