使用 ORACLE SQL 修复字符串中损坏的字符(例如变音符号)并将其转换为正确的 UTF-8

Fix corrupted characters (e.g. umlauts) in a string using ORACLE SQL and convert it to proper UTF-8

我目前有一个 ORACLE table,其中一列包含明显损坏的字符串,如下所示:Pachtvertrag über eine Gaststätte.

在某些时候,可能对字符串使用了错误的编码。有没有办法修复像这样的字符串中的“错误”编码,即使字符串已经像这样损坏了?

我尝试了以下方法:

SELECT CONVERT('Pachtvertrag über eine Gaststätte', 'UTF8', 'US7ASCII') FROM DUAL;

但这导致:Pachtvertrag ����ber eine Gastst����tte,而实际上应该是 Pachtvertrag über eine Gaststätte

我的另一个想法是以某种方式首先将字符串转换为字节(例如,通过使用 TO_SINGLE_BYTE),但这也没有产生预期的结果。

字符集US7ASCII不支持特殊字符,必须翻转字符集

所以,更正语句必须像

CONVERT('Pachtvertrag über eine Gaststätte', 'WE8ISO8859P1', 'AL32UTF8')

请注意,ISO-8859-1、ISO-8859-15 和 Windows-CP1252 (WE8MSWIN1252) 非常相似。请参阅 ISO 8859-15 vs. -1 vs. Windows-1252 vs. Unicode 并选择正确的编码。