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
La base de datos tiene codificación UTF8 y colación cs_CZ.UTF-8