我有一个包含互联网数据的数据库,但有些网页编码错误,ã
等字母变为ã
,ç
变为ç
。
有什么可能解决这个问题?我正在使用PostgreSQL。
我可以使用替换,但我需要替换每个案例?我正在考虑翻译,但我发现它只将一个字符转换为其他字符。可以将两个字符翻译成一个吗?类似于:TRANSLATE(text,'ã|ç','ã|ç')
。
答案 0 :(得分:3)
这个特殊问题看起来像你有UTF-8编码被解释为单字节字符集(“ç”变成“Ô表示iso-8859-1)。
您可以使用一长串replace(...)
来单独解决这些问题。或者您可以使用postgresql自己的字符转换工具:
select convert_from(convert_to('£20 - garçon', 'iso-8859-1'), 'utf-8')
按顺序,这个:
答案 1 :(得分:1)
你可以通过替换它们来修复一些角色,但不是全部。通过使用错误的编码解码数据,您已经删除了一些信息,这是不可能的。
您应该找出这些页面的正确编码,并在解码数据时使用它。
某些页面在响应标头中具有编码,例如
Content-Type: text/html; charset=utf8
有些页面在HTML头中有编码,例如
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
如果信息不在标题中,您首先必须使用ASCII编码对页面(或至少其中的一部分)进行解码(这不是问题,因为元标记不包含特殊字符),请查找编码,然后使用正确的编码解码页面。
答案 2 :(得分:1)
PostgreSQL有一个字符串替换函数:
replace(string text, from text, to text)
:用子串string
替换from
子串to
中的所有匹配项
示例:
replace ('abcdefabcdef', 'cd', 'XX') ==> abXXefabXXef