使用 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 并选择正确的编码。
我目前有一个 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 并选择正确的编码。