我有UTF-16十六进制表示,例如阿拉伯语中的“06330644406270645”,即“سلام”。
我想把它转换成等价的文本。在PostgreSQL中有直接的方法吗?
我可以像下面这样转换UTF代码点;不幸的是,似乎不支持UTF16。在PostgreSQL中,最坏的情况是我要写一个函数,有什么想法吗?
SELECT convert_from (decode (E'D8B3D984D8A7D985', 'hex'),'UTF8');
"سلام"
SELECT convert_from (decode (E'0633064406270645', 'hex'),'UTF16');
ERROR: invalid source encoding name "UTF16"
********** Error **********
最佳答案
没错,Postgres不支持UTF-16。
但是,它确实支持Unicode escape sequences:
SELECT U&'\0633\0644\0627\0645'
但请记住,Unicode代码点和UTF-16代码单元仅在Basic Multilingual Plane中等效。换言之,如果您有任何跨越多个16位代码单元的UTF-16字符,则需要自己将它们转换为相应的代码点。