我有大量苏格兰和威尔士口音的地名(结合了严重、急性、抑扬符和 diareses),我需要将其更新为它们的 unicode 规范化形式,例如,较短的形式 00E1 (\xe1)á
代替 0061 + 0301 ( \x61\x301)
我从 2009 年的旧 Postgres nabble 邮件列表中找到了一个解决方案,使用 pl/python,
create or replace function unicode_normalize(str text) returns text as $$
import unicodedata
return unicodedata.normalize('NFC', str.decode('UTF-8'))
$$ LANGUAGE PLPYTHONU;
正如预期的那样,这很有效,但让我想知道是否有任何方法可以直接使用内置的 Postgres 函数。我使用 convert_to 尝试了各种转换,但都是徒劳的。
编辑:正如克雷格所指出的,我尝试过的一件事是:
SELECT convert_to(E'\u00E1', 'iso-8859-1');
返回\xe1
,而
SELECT convert_to(E'\u0061\u0301', 'iso-8859-1');
失败了ERROR: character 0xcc81 of encoding "UTF8" has no equivalent in "LATIN1"