一個老特技使用解析器用於此目的的:
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$
它的工作原理,但它是SQL注入漏洞 - 所以你應該先清理輸入文本!
這裏的可讀性,但安全的版本 - 但你必須手工指定一個字符爲轉義符:
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$
結果
postgres=# select unescape('Odpov\u011Bdn\u00E1 osoba','^');
unescape
-----------------
Odpovědná osoba
(1 row)
另一個有用的答案是這樣的重複:HTTP:/ /stackoverflow.com/q/10111654/398670以及關於此問題的更多解釋:http://stackoverflow.com/q/23659685/398670 –