现有Oracle数据库存在编码问题。从Java方面,我应用这些并修复它:
textToEscape = textToEscape.replace(/ö/g, 'ö');
textToEscape = textToEscape.replace(/ç/g, 'ç');
textToEscape = textToEscape.replace(/ü/g, 'ü');
textToEscape = textToEscape.replace(/ÅŸ/g, 'ş');
textToEscape = textToEscape.replace(/Ä/g, 'ğ');
有一个从数据库中检索数据的过程。我想编写一个函数并在其中应用替换序列。我找到了链接:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions134.htm
但是我想申请后续替换。我该如何链接它们?
答案 0 :(得分:0)
您可以使用Oracle CONVERT函数将数据转换为数据库过程本身内部的正确字符集(与您的JAVA字符集兼容)。
那应该为你处理所有案件。
答案 1 :(得分:0)
假设您的数据库字符集为AL32UTF8
,您看到的格式错误的字符源于8位字符集编码(可能是iso-8859-9 [土耳其语])重复转换为utf中的unicode -8表示。当然,这些转换中的第二个错误地应用于构成数据的valis utf表示的字节序列。
您可以使用utl_raw
包在数据库中撤消此操作。假设tab.col
包含您的数据,以下声明会对其进行纠正。
update tab set col = utl_raw.cast_to_varchar2 ( utl_raw.convert ( utl_raw.cast_to_raw ( col ), 'WE8ISO8859P9', 'AL32UTF8' ) );
强制转换会重新保留字符数据的类型,这有效地允许对基础八位字节(字节)序列进行操作。在这个级别上,eroneus utf-8映射是暴力的。由于结果仍然是数据库字符集中的有效表示形式,因此简单的重新转换将提供结果。