【问题标题】:Could not remove unicode character无法删除 Unicode 字符
【发布时间】:2018-05-08 01:12:36
【问题描述】:

我在 Oracle 表中有一个文本字符串(“NGUYỄN NGỌC HOÀ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> 选项卡为 ( select '&i_str1' str1 from dual ) 2 select str1, utl_raw.cast_to_varchar2((nlssort(str1,'nls_sort=binary_ai'))) str2 从选项卡 SQL> / 输入 i_str1 的值:NGUYỄN NGỌC HOÀNG

【问题讨论】:

    标签: oracle unicode encoding hex


    【解决方案1】:

    如果您使用 Java 连接 Oracle DBMS,请尝试使用下面的 Java 代码转换为非重音字符,然后更新 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("đ", "");
    }
    

    【讨论】:

    • 谢谢,请问有什么办法可以通过脚本来实现吗?
    • 你的意思是什么脚本? Oracle 脚本还是别的什么?
    • Oracle脚本,我只想在数据库中处理
    【解决方案2】:
    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
    

    你会得到想要的结果。

    【讨论】:

    • 我试过了,但是没用。你能看看我更新的问题吗?
    • 您好,先生,我可以保留大写吗?
    • @HoangTran 我无法在我的数据库中测试是否有效,但你可以在你的数据库中用它utl_raw.cast_to_varchar2(rawtohex(str1)) 替换 str2。
    【解决方案3】:

    你可以试试这个函数来转换成非重音字符:

    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;
    

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      相关资源
      最近更新 更多