chunjun icon indicating copy to clipboard operation
chunjun copied to clipboard

logminer插件 从日志中读取到的sql中文UNISTR转码问题

Open 364220158 opened this issue 2 years ago • 2 comments

logminer插件从日志中读取到的sql中文有UNISTR转码,sink为oracle时将oracle的unistr函数当作字符串写入 Uploading 微信截图_20220507172455.png… Uploading 微信截图_20220507172615.png…

364220158 avatar May 07 '22 09:05 364220158

com.dtstack.flinkx.connector.oraclelogminer.listener.LogParser 的parseString方法中添加 以下代码,UNISTR开头的话将16进制数字转为字符串 if (value.startsWith("UNISTR('")) { try { String s1 = value.substring(8, value.length() - 2); if (StringUtils.isNotEmpty(s1)) { return decodeUnicode(s1); } else { return ""; }

        } catch (Exception e) {
            throw new RuntimeException("parse value [" + value + " ] failed ", e);
        }
    }

public static String decodeUnicode(String dataStr) {
    int start = dataStr.indexOf("\\");
    int end = 0;
    final StringBuffer buffer = new StringBuffer(dataStr.substring(0, start));
    while (start > -1) {
        end = dataStr.indexOf("\\", start + 1);
        String charStr = "";
        if (end == -1) {
            charStr = dataStr.substring(start + 1, dataStr.length());
        } else {
            charStr = dataStr.substring(start + 1, end);
        }
        char letter = (char) Integer.parseInt(charStr, 16); // 16进制parse整形字符串。
        buffer.append(new Character(letter).toString());
        start = end;
    }
    return new String(buffer.toString().getBytes(), StandardCharsets.UTF_8);
}

364220158 avatar May 10 '22 01:05 364220158

Hello, thanks for your comment. Can you provide a pr to fix it?

FlechazoW avatar Jun 21 '22 06:06 FlechazoW

PR merged.

FlechazoW avatar Sep 28 '22 09:09 FlechazoW