如何让Java忽略字符串中的转义序列?
我正在编写一个Java代码来从Oracle数据库表中读取Blob对象 我需要检索blob对象并将它们存储到字符串中以供进一步处理。 我通过以下方法将blob对象内容转换为字符串:如何让Java忽略字符串中的转义序列?,java,string,blob,Java,String,Blob,我正在编写一个Java代码来从Oracle数据库表中读取Blob对象 我需要检索blob对象并将它们存储到字符串中以供进一步处理。 我通过以下方法将blob对象内容转换为字符串: java.sql.Blob blob = rs.getBlob(i); columnValue = new String(blob.getBytes(1l, (int) blob.length())); 但是,当我试图解析结果字符串时,会出现错误,说“不是有效的转义序列”,因为Blob数据显然由一些数据组成,如\x、
java.sql.Blob blob = rs.getBlob(i);
columnValue = new String(blob.getBytes(1l, (int) blob.length()));
但是,当我试图解析结果字符串时,会出现错误,说“不是有效的转义序列”,因为Blob数据显然由一些数据组成,如\x、\I或其他什么
有没有办法让
java.sql.Clob
来处理文本数据。我假设“parse”指的是与正则表达式相关的内容,因为否则将这些值存储在字符串中可以正常工作-转义序列仅对字符串文本和正则表达式有用
无论如何,你应该做你想做的事(来自commons lang)
除此之外,您应该使用
java.sql.Clob
获取文本数据。问题与“\x”转义序列无关。(这些转义序列仅在字符串文字中有意义——它们与新字符串
无关。正则表达式中的转义序列只是对字符串的解释。)
问题是blob包含的数据对于给定的编码无效。从文件中:
当给定字节在默认字符集中无效时,此构造函数的行为未指定。当需要对解码过程进行更多控制时,应使用CharsetDecoder类
另外请注意,不应使用新字符串(字节[]),因为(同样来自文档):
通过使用平台的默认字符集对指定的字节数组进行解码来构造新字符串。
因此,我怀疑
快乐编码问题与“\x”转义序列无关。(这些转义序列仅在字符串文字中有意义——它们与
新字符串
无关。正则表达式中的转义序列只是对字符串的解释。)
问题是blob包含的数据对于给定的编码无效。从文件中:
当给定字节在默认字符集中无效时,此构造函数的行为未指定。当需要对解码过程进行更多控制时,应使用CharsetDecoder类
另外请注意,不应使用新字符串(字节[]),因为(同样来自文档):
通过使用平台的默认字符集对指定的字节数组进行解码来构造新字符串。
因此,我怀疑
快乐编码问题并非如预期的那样。转义序列仅在字符串文本中有意义。更可能的是,blob对编码无效(使用采用显式编码的
新字符串
,并根据需要选择编码)。如果blob中有非ascii数据,然后在转换为时传递编码string@sudsomg问题比这更险恶——如果没有显式编码,新字符串将依赖于系统,并且不可移植,它将尝试使用哪种编码。这是真正的文本数据吗?如果不是,则不应将其转换为字符串。(如果是,为什么是一个blob?)你说的是试图解析结果字符串-你说的是什么样的解析?@Jon。。我不知道它包含的数据类型。。我只是想把它转换成一个字符串,看看它的内容。。。。我没有使用任何特殊的解析技术。这只是我用过的作品!!!问题并不像预期的那样。转义序列仅在字符串文本中有意义。更可能的是,blob对编码无效(使用采用显式编码的新字符串
,并根据需要选择编码)。如果blob中有非ascii数据,然后在转换为时传递编码string@sudsomg问题比这更险恶——如果没有显式编码,新字符串将依赖于系统,并且不可移植,它将尝试使用哪种编码。这是真正的文本数据吗?如果不是,则不应将其转换为字符串。(如果是,为什么是一个blob?)你说的是试图解析结果字符串-你说的是什么样的解析?@Jon。。我不知道它包含的数据类型。。我只是想把它转换成一个字符串,看看它的内容。。。。我没有使用任何特殊的解析技术。这只是我用过的作品!!!这意味着我需要知道Blob的编码才能得到正确的数据?没有这个就没有办法了吗?@Shyam这是最好的办法,是的。一些字符集解码器(理论上)可以自动检测字符集,并且可以使用字符集(基本上只是将特定的Unicode编码“类型”存储为编码数据的一部分)。甚至可以使用try-X-and-if-that-fails-try-Y方法,但所有这些实际上都归结为手头的特定需求。不过,请先仔细检查blob数据,这可能是一个非常小的错误,例如在本应跳过两个字节时跳过一个字节;-)所以