如何让Java忽略String中的转义序列?

时间:2011-09-22 05:51:50

标签: java string blob

我正在编写一个Java代码来从Oracle数据库表中读取Blob对象。

我需要检索blob对象并将它们存储到String中以进行进一步处理。 我将blob对象内容转换为String:

java.sql.Blob blob = rs.getBlob(i);
columnValue = new String(blob.getBytes(1l, (int) blob.length()));

然而,当我尝试解析结果字符串时,我得到的错误是“不是有效的转义序列”,因为显然Blob数据包含一些数据,如 \ x,\ i 或其他什么!

有没有办法让 Java忽略这些转义序列,并让它只考虑字符串及其内容(即字符串包含\ x,\ i等)?

2 个答案:

答案 0 :(得分:3)

我认为通过“解析”你指的是与正则表达式相关的东西,因为否则将这些值存储在字符串中就可以正常工作 - 转义序列仅对字符串文字和正则表达式有用。

无论如何,StringEscapeUtils.escapeJava(..)应该做你想做的事(来自commons-lang)

除此之外 - 您应该使用java.sql.Clob作为文本数据。

答案 1 :(得分:2)

该问题与“\ x”转义序列无关。 (这些转义序列只在字符串文字中有意义 - 它们与new String没有没有。正则表达式中的转义序列只是对字符串的解释。)

问题是blob包含给定编码的无效的数据。来自new String(byte[])文档:

  

未指定给定字节在默认字符集中无效时此构造函数的行为。当需要更多地控制解码过程时,应使用CharsetDecoder类。

另请注意,new String(byte[]) 不应使用,因为(也来自文档):

  

使用平台的默认字符集解码指定的字节数组构造一个新的字符串。

因此我怀疑

  1. 使用的blob数据完全无效和/或;
  2. “默认字符集”与提供的字节的编码不匹配
  3. 快乐编码