2009/10/27 Leonardo Cezar <lhce...@gmail.com>:

Homologando essa solulção de conversão de unicode para ascii me
deparei com um bug(?):

>      name       | setting
> -----------------+---------
>  client_encoding | UTF8
>  server_encoding | UTF8
>
> SELECT to_ascii('ÁÉÍÓÚáéíóÉÓ£¤©');
                                             ^^
>    to_ascii
> ----------------
>  AEIOUaei EOL C
                  ^^
Aquela tabela de tradução utilizada no núcleo do postgres não converte
meu "ó" e provavelmente não deve funcionar para outros caracteres.

Alguém tem idéia onde foi que eu errei??


Definição da função:

CREATE OR REPLACE FUNCTION public.to_ascii(IN a TEXT, OUT o TEXT)
   LANGUAGE PLPGSQL
AS
$public_to_ascii$
DECLARE
   -- baseado em src/backend/util/udt/ascii.c
   t TEXT :=  $$  cL Y  "Ca  -R     'u .,      ?AAAAAAACEEEEIIII
NOOOOOxOUUUUYTBaaaaaaaceeeeiiii no    oooo/ouuuuyty$$;
   i INTEGER := 1;
   text_ascii TEXT := $$$$;
   range INTEGER := 160;
   z INTEGER := 0;
BEGIN
WHILE (i <= length(a)) LOOP
   z := ascii(substr(a,i,1));
   IF z < 128 THEN
       o := COALESCE(o,'') || substr(a,i,1);
   ELSIF z < range THEN
       o := COALESCE(o,'') || $$ $$;
   ELSE
       o := COALESCE(o,'') || substr(t,(z - range)+1,1) ;
   END IF;
   i := i + 1;
END LOOP;
RETURN;
END;
$public_to_ascii$;

-Leo
-- 
Leonardo Cezar
http://www.aslid.org.br
http://postgreslogia.wordpress.com
http://www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a