postgresql - ملكية - موقع مديرية المرور العامة الغرامات الرقم الصدامي



تحويل حرف يونيكود هرب إلى الحرف الفعلي في بوستغريزل (1)

هل هناك طريقة يمكنني تحويل السلسلة التالية مرة أخرى إلى القيمة التي يمكن قراءتها بواسطة الإنسان؟ لدي بعض البيانات الخارجية حيث يتم هروب جميع الأحرف غير أسي.

أمثلة السلاسل:

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

النتيجة المطلوبة:

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

SQLFiddle

قاعدة البيانات لديها ترميز UTF8 ومقارنة cs_CZ.UTF-8


إحدى الخدع القديمة تستخدم المحلل لهذا الغرض:

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$

وهو يعمل، وإنما هو حقن سكل الضعيفة - لذلك يجب عليك أن تعقيم النص المدخلات أولا!

هنا هو أقل قابلية للقراءة، ولكن نسخة آمنة - ولكن عليك أن تحدد يدويا شار واحد كرمز الهروب:

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)




postgresql-9.1