检查并删除文件中的隐藏字符

时间:2016-11-07 13:27:00

标签: oracle plsql non-ascii-characters

我有一个我正在处理的文件,它不断给我错误。经过一番检查后,我意识到它有一些隐藏的特殊字符。

我只是手动找到了隐藏的字符并进行了简单的替换,如

REPLACE( String,'', '') 

我怎么能阻止将来发生这种情况?

我尝试创建一个存储这些隐藏的ascii字符的表,这些字符在 125-255 的范围内,但数据库不会相应地存储它们。 例如, chr(168) ascii 168不同。

select chr('168'), 
       convert(chr('168'), 
       'US7ASCII', 
       'WE8ISO8859P1') 
from dual;

我还能尝试什么?

1 个答案:

答案 0 :(得分:0)

易于编写,但执行速度最快 - 使用regexp_replace:

update table_name
set column_name = 
             regexp_replace(column_name, '[' || chr(125) || '-' || chr(255) || ']', '')
;

效率更高,但是书写和维护的痛苦(你可以编写一些代码来生成代码,以节省一些打字):

...
set column_name = 
           translate(column_name, '~' || chr(125) || chr(126) || ..... || chr(255), '~')
;

是的,使用translate(),你必须将它们拼写出来,没有“范围”概念... {: - (

这是为了更改表中已有的数据。如果可以的话,在数据进入时修复数据会更好 - 使用类似的转换。