Java 从BLOB数据类型中提取特殊字符

Java 从BLOB数据类型中提取特殊字符,java,oracle,text,blob,special-characters,Java,Oracle,Text,Blob,Special Characters,我正在从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:152

我正在从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
我的所有字段标记字符(þ)都在转义

任何帮助都将不胜感激。在过去的两天里,我一直在努力解决这个问题


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

试一试

范例

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

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

确保存储在数据库中的数据是UTF-8格式。 还可以通过指定编码创建新字符串:

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

哦,是吗?我添加了java标记,但如果不是,我的道歉。嗨,添加UTF-8后,我也没有得到任何帮助。所有特殊字符都在转义。你能确认你的字节是正确的吗。正如我所说,特殊字符是-61-66。如果最初的数据不正确,我们需要看看。嗨,我已经检查了字节是否正确。我不知道为什么我的特殊字符会逃逸我,我尝试过你上面的示例,但得到“EUR101010?GBP100011200?GBP100011250?GBP100011500?GB”我认为你的设置有些奇怪。你在用什么IDE?嗨,Yury,谢谢你的快速回复!使用特定编码创建新字符串后,我的特殊字符也将转义。奇怪的是@user2310289注释中的示例不起作用。只是另一个猜测-尝试添加JVM参数-Dfile.encoding=UTF8在添加JVM参数后,我得到的是“EUR100011510¾GBP100011200¾GBP100011250¾GBP100011500¾GB”,但我已经将默认字符集添加到了“UTF-8”,尝试另一个猜测:进入Eclipse中的窗口->首选项,在General->Workspace中设置文本文件编码到UTF-8。之后,使用@user2310289的简单测试重新创建一个文件。
String text = new String(bdata, "UTF-8");
System.out.println("TEXT "+ text);