oracle [^[:print:]]无法过滤 非打印字符

I find that in my oracle database there have some non-printable character, so I try to use regexp_replace to remove the non-printable characters as below:

`select common_name before_value, 
       regexp_replace(common_name, '[^[:print:]]', '?') after_reg_value
from my_data;`
result as below:
before_value             after_reg_value
------------------------------------------
Verm�gensstrukt         Verm?gensstrukt
DG HYP �FE                 DG HYP �FE
KL�KNER                 KL�KNER
BGF GHYB X2 �H             BGF GHYB X2 ?H
7.77% Cr�t Agr             7.77% Cr?t Agr
PUBLIC STO�             PUBLIC STO?
M�nchener R�ck A         M?nchener R?ck A

from the result we can see that, some non-printable characters are been replace by '?', but others didn't.

select dump(common_name,1016) value
from my_data;

value
----------------------------------------------------------------------------
Typ=1 Len=15 CharacterSet=UTF8: 56,65,72,6d,f6,67,65,6e,73,73,74,72,75,6b,74
Typ=1 Len=11 CharacterSet=UTF8: 44,47,20,48,59,50,20,d6,50,46,45
Typ=1 Len=8 CharacterSet=UTF8: 4b,4c,d6,43,4b,4e,45,52
Typ=1 Len=14 CharacterSet=UTF8: 42,47,46,20,47,48,59,42,20,58,32,20,a3,48
Typ=1 Len=16 CharacterSet=UTF8: 37,2e,37,37,25,20,43,72,e9,64,69,74,20,41,67,72
Typ=1 Len=12 CharacterSet=UTF8: 50,55,42,4c,49,43,20,53,54,4f,c3,3f
Typ=1 Len=16 CharacterSet=UTF8: 4d,fc,6e,63,68,65,6e,65,72,20,52,fc,63,6b,20,41

from the dump result we can find that:
In 'Verm�gensstrukt' the � was translate to 'f6' who can be repleace by '?'
while in 'DG HYP �FE' the � was translate to 'd6, 50', who didn't been find.

Can you help me to find a solution to filter out all the � ?

猜你喜欢

转载自jaler.iteye.com/blog/2170420