我有一个SQL Server数据库,里面充满了编码错误的字符。问题在于ETL是用Java编写的,默认编码错误,因此直接加载了编码错误的字符。数据库实际上包含字符ö而不是ö
我已经解决了ETL的问题,现在我想解决现有数据。我知道我可以使用REPLACE()来替换字符,但是我的问题是我没有确定的字符列表以及它们的“假定”对象。
我已经在互联网上搜寻了某种确定的清单,但找不到。我只需要一个这样的清单:
ö>ö
é>é
等
编辑:我首先认为“不良”编码是ISO 8859-15,实际上我只是检查了以前的默认字符集,它是Windows-1252。我已经更新了帖子的标题。
答案 0 :(得分:0)
这是一个很大的清单。 UTF-8将每个Unicode代码点的所有Unicode编码为一到四个字节。有1,114,111个Unicode代码点(如果对UTF-16替代产品打折,则为1,112,064个)。
使用Windows-1252读取字符串,使用Windows-1252将它们编码为字节,使用UTF-8解码将更加容易。 Python中的示例,因为我可以进行演示:
>>> s = 'öé'
>>> s.encode('Windows-1252').decode('UTF-8')
'öé'
不过请注意,Windows-1252有损。 UTF-8中使用的某些字节在Windows-1252中没有定义,因此有可能在写入数据库时将其删除。也有可能使用了ISO-8859-1
(又名latin1
),它接近Windows-1252,但是所有字节都已定义。