postgresql unicode encoding postgresql-9.1

Convierta el carácter Unicode escapado nuevamente en el carácter real en PostgreSQL



encoding postgresql-9.1 (1)

Un viejo truco es usar el analizador para este propósito:

postgres=# select e''Telefon/u00ED kontakty''; ?column? ------------------- Telefoní kontakty (1 row) CREATE OR REPLACE FUNCTION public.unescape(text) RETURNS text LANGUAGE plpgsql AS $function$ DECLARE result text; BEGIN EXECUTE format(''SELECT e''''%s'''''', $1) INTO result; RETURN result; END; $function$

Funciona, pero es una inyección SQL vulnerable, ¡por lo que primero debe desinfectar el texto de entrada!

Aquí hay una versión menos legible pero segura, pero tienes que especificar manualmente un carácter como símbolo de escape:

CREATE OR REPLACE FUNCTION public.unescape(text, text) RETURNS text LANGUAGE plpgsql AS $function$ DECLARE result text; BEGIN EXECUTE format(''SELECT U&%s UESCAPE %s'', quote_literal(replace($1, ''/u'',''^'')), quote_literal($2)) INTO result; RETURN result; END; $function$

Resultado

postgres=# select unescape(''Odpov/u011Bdn/u00E1 osoba'',''^''); unescape ----------------- Odpovědná osoba (1 row)

¿Hay alguna manera de cómo puedo convertir la siguiente cadena al valor legible para el ser humano? Tengo algunos datos externos donde todos los caracteres no ascii se escapan.

Ejemplos de cadenas:

16 StringProvider_111=Telefon/u00ED kontakty 17 StringProvider_116=Odpov/u011Bdn/u00E1 osoba

Resultado requerido:

16 StringProvider_111=Telefoní kontakty 17 StringProvider_116=Odpovědná osoba

SQLFiddle

La base de datos tiene codificación UTF8 y colación cs_CZ.UTF-8