【问题标题】:Eascaping special characters from BLOB data types从 BLOB 数据类型中转义特殊字符
【发布时间】:2014-01-08 21:18:00
【问题描述】:

我正在从 Oracle 数据库中读取 BLOB 数据类型表。但是特殊字符正在逃脱。下面是我的代码。

public static void main(String args[]) throws FileNotFoundException

{

    System.out.println("Oracle Connect START.");
    Connection conn = null;

    String url = "jdbc:oracle:thin:@localhost:1521:";
    String dbName = "xe";
    String driver = "oracle.jdbc.OracleDriver";
    String userName = "T24DBA";
    String password = "ABCD123abcd";
    int locationofp=0;
    ResultSet orset = null;
    ResultSet rs1 = null;
    try {
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url+dbName,userName,password);
        Statement stmt = conn.createStatement();
        orset =stmt.executeQuery("select RECID, XMLRECORD from karthi");

        Blob lob = null;
        FileOutputStream fos = new FileOutputStream("C:/DataRead/fbnk.txt");
        DataOutputStream dos = new DataOutputStream(fos);

        while (orset.next()) {
            String RECID = orset.getString(1);


            lob=orset.getBlob("XMLRECORD");
            byte[] bdata = lob.getBytes(1, (int) lob.length());
            String text = new String(bdata);
            System.out.println("TEXT "+ text);
        }
    }

数据库中的记录是

EUR100011510þGBP100011200þGBP100011250þGBP100011500þGB

但我得到的输出是

EUR100011510�GBP100011200�GBP100011250�GBP100011500�GB

我所有的字段标记字符(þ)都在转义。

任何帮助将不胜感激。过去两天我一直在为此苦苦挣扎

谢谢

【问题讨论】:

  • OP,这是java吗?我添加了 java 标签,但如果不是,我很抱歉。

标签: java oracle text blob special-characters


【解决方案1】:

原因是您的默认字符集不是 UTF-8,而您的特殊字符的字节数是 -61 -66(不是 ascii)

试试

System.out.println(new String (bdata, "UTF-8"));

例子

    byte[] str = "EUR100011510þGBP100011200þGBP100011250þGBP100011500þGB".getBytes();

    try {
        System.out.println(new String (str, "UTF-8"));
    } catch (UnsupportedEncodingException e1) {
        e1.printStackTrace();
    }

【讨论】:

  • 嗨,添加 UTF-8 后我也没有得到。所有特殊字符都在转义。
  • 你能确认你的字节是正确的吗?正如我所说,特殊字符是-61 -66。如果数据原来不正确,我们需要看看。
  • 嗨,我只检查了字节是否正确。我不知道为什么我的特殊字符正在转义
  • 嗨,我已经尝试过您的上述示例,但得到的结果为“EUR100011510?GBP100011200?GBP100011250?GBP100011500?GB”
  • 我认为您的设置有些奇怪。您使用的是什么 IDE?
【解决方案2】:

确保存储到数据库中的数据采用 UTF-8 格式。 同时创建一个指定编码的新字符串:

String text = new String(bdata, "UTF-8");
System.out.println("TEXT "+ text);

【讨论】:

  • 您好 Yury,感谢您的快速回复!在创建具有特定编码的新字符串后,我的特殊字符也在转义。这背后的任何想法..
  • 奇怪的是,@user2310289 评论中的示例不起作用。只是另一个猜测 - 尝试添加 JVM 参数 -Dfile.encoding=UTF8
  • 添加 JVM 参数后,我得到“EUR100011510×GBP100011200×GBP100011250×GBP100011500×GB”
  • 但我已将默认字符集添加到“UTF-8”
  • 尝试另一种猜测:进入 Eclipse 中的 Window->Preferences 并将 General->Workspace 中的文本文件编码设置为 UTF-8。之后使用来自@user2310289 的简单测试重新创建一个文件。
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
相关资源
最近更新 更多