Java ? jdbc clob中的符号

Java ? jdbc clob中的符号,java,jdbc,character-encoding,clob,Java,Jdbc,Character Encoding,Clob,在Clob对象中写入和读取带有«,»字符的文本时出现问题。 我尝试了多个选项(使用clob.setCharacterStream(0L)等),但找不到解决方案 Connection conn = getConnection(); String str = new String("Bank «My Money»".getBytes(StandardCharsets.UTF_8)); Clob myClob = conn.createClob(); myClob.setStrin

在Clob对象中写入和读取带有«,»字符的文本时出现问题。 我尝试了多个选项(使用clob.setCharacterStream(0L)等),但找不到解决方案

Connection conn = getConnection();
String str = new String("Bank «My Money»".getBytes(StandardCharsets.UTF_8));
Clob myClob = conn.createClob();
myClob.setString(1, str);

String res = myClob.getSubString(1, str.length());
System.out.println(res);

结果是“银行?我的钱?”

Oracle数据库?在这种情况下,什么版本,什么数据库字符集?我似乎记得有些函数返回varchar2,即使用数据库字符集或连接的字符集。此外,我刚刚读取的java字符串始终是UTF-16。您可以尝试使用byte[].@GerardH.Pille Java strings内部为UTF-16与它实际编码到目的地的方式无关。为什么要使用
新字符串(“Bank«My Money»”.getBytes(StandardCharsets.UTF_8))
?如果您的默认字符集不是UTF-8,这将用?或者莫吉贝克。使用
“Bank«My Money»”
就足以定义具有该值的字符串(假设您的代码是使用UTF-8编译的)。@GerardH.Pille这不仅仅是无用的,如果OPs系统的默认字符集不是UTF-8,这可能是观察到的问题的潜在原因(因为随后使用不同的字符集将UTF-8字节转换为字符串)。例如,如果默认字符集为GBK,则将生成字符串
“银行?我的钱?”
,如果是Cp1252,则将生成
“银行?我的钱?”
,如果是koi8,则将生成
“银行?”?╚我的钱?╩",等等。除此之外,数据库可能会带来额外的字符集转换问题。Oracle数据库?在这种情况下,什么版本,数据库字符集是什么?我似乎记得一些函数返回了varchar2,即使用数据库字符集或连接的字符集。此外,我刚刚读取了一个java字符串始终使用UTF-16。您可以尝试使用字节[]。@GerardH.Pille内部的Java字符串UTF-16与它实际编码到目的地的方式无关。为什么要使用
新字符串(“银行«我的钱»”。getBytes(StandardCharset.UTF_8))
?如果您的默认字符集不是UTF-8,这将用?或mojibake替换这些Guillet。使用
“Bank«My Money»”
就足以定义具有该值的字符串(假设您的代码是使用UTF-8编译的).@GerardH.Pille这不仅仅是无用的,如果OPs系统的默认字符集不是UTF-8,这可能是观察到的问题的潜在原因(因为您随后使用不同的字符集将UTF-8字节转换为字符串)。例如,如果默认字符集是GBK,则这将生成一个字符串
“银行?我的钱?”?“
,如果是Cp1252,它将生成
“银行”«我的钱»”
,如果是koi8,它将生成
“银行”»?╚我的钱?╩",等等。除此之外,数据库可能会引发其他字符集转换问题。