Java 从BLOB数据类型中提取特殊字符
我正在从Oracle数据库中读取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
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);