无法删除unicode字符

时间:2017-11-24 04:01:06

标签: oracle unicode encoding hex

我在Oracle表中有一个文本字符串(“NGUYỄNNGỌCCHÀNG”)。我试图替换Unicode字符串(我的预期结果是“NGUYEN NGOC HOANG”),但它没有用。

然后我尝试将其转换为HEX,如下所示:select rawtohex(UnicodeColumn) from TestTable; 结果如下:4E 47 55 59 C3 8A CC 83 4E 20 4E 47 4F CC A3 43 20 48 4F 41 CC 80 4E 47

遵循Unicode表格:相应的字符为:NGUYỄN NGOÌ£C HOAÌ€NG

任何人都可以帮我这个案例(Oracle脚本),我没有关于编码的经验。

  

更新1:

我尝试过BarbarosÖzhan的解决方案,但它无法正常工作

  

SQL>选项卡为(从'选择'& i_str1'str1)2选择str1,   utl_raw.cast_to_varchar2((nlssort(str1,'nls_sort = binary_ai')))str2   来自选项卡SQL> /输入i_str1的值:NGUYỄNNGỌCHOÀNG

enter image description here

3 个答案:

答案 0 :(得分:1)

SQL> with tab as ( select '&i_str1' str1 from dual )
  2  select str1, utl_raw.cast_to_varchar2((nlssort(str1,'nls_sort=binary_ai'))) str2 from tab
SQL> /
Enter value for i_str1: NGUYỄN NGỌC HOÀNG

,你得到了理想的结果。

答案 1 :(得分:0)

如果您使用Java连接到Oracle DBMS,请尝试使用以下Java代码转换为unaccent字符,然后再更新DBMS中的行。

public static String unAccent(String s) {
    String temp = Normalizer.normalize(s, Normalizer.Form.NFD);
    Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
    return pattern.matcher(temp).replaceAll("").replaceAll("Đ", "D").replace("đ", "");
}

答案 2 :(得分:0)

您可以尝试使用此功能转换为非重音字符:

CREATE OR REPLACE FUNCTION FN_CONVERT_TO_VN
(
    STRINPUT IN NVARCHAR2
)
RETURN NVARCHAR2
IS
    STRCONVERT NVARCHAR2(32527);
BEGIN
STRCONVERT := TRANSLATE(
    STRINPUT, 'áàảãạăắằẳẵặâấầẩẫậđéèẻẽẹêếềểễệíìỉĩịóòỏõọôốồổỗộơớờởỡợúùủũụưứừửữựýỳỷỹỵÁÀẢÃẠĂẮẰẲẴẶÂẤẦẨẪẬĐÉÈẺẼẸÊẾỀỂỄỆÍÌỈĨỊÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢÚÙỦŨỤƯỨỪỬỮỰÝỲỶỸỴ', 'aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAAAAAAAAAAAAAAADEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYY'
);
RETURN STRCONVERT;
END;