PostgreSQL是否有函数将非ASCII字符转换为Unicode转义序列?
PostgreSQL 转换非ASCII字符为Unicode转义序列的方法
PostgreSQL没有直接的内置函数实现该需求,但可以通过组合现有函数或自定义函数完成。
实现思路
利用unicode()获取字符的Unicode码点,通过to_hex()转为十六进制字符串,再补全前导零并拼接\u前缀,最终组合成Unicode转义序列。
自定义函数示例
创建一个通用函数,自动处理字符串中的所有非ASCII字符:
CREATE OR REPLACE FUNCTION unicode_escape(input_text text) RETURNS text AS $$ SELECT string_agg( CASE WHEN ascii(char) < 128 THEN char ELSE '\u' || lpad(to_hex(unicode(char)), 4, '0') END, '' ) FROM regexp_split_to_table($1, '') char; $$ LANGUAGE sql IMMUTABLE;
测试使用
对波兰语字母ż进行转换:
SELECT unicode_escape('ż');
返回结果:\u017C
为什么encode和convert_from不适用
encode函数针对字节流处理,例如encode('ż'::bytea, 'escape')会返回\xC5\xBC,这是该字符UTF-8编码的字节转义,而非Unicode码点的转义序列。convert_from用于不同字符编码间的转换,无法生成Unicode转义格式的字符串。
内容的提问来源于stack exchange,提问作者Konrad S
相关产品推荐
相关产品推荐

