【发布时间】:2016-08-27 11:27:08
【问题描述】:
我尝试通过 java 将一些特殊字符插入到 oracle 表中,然后再次检索它——假设我的编码可以工作。 下面是我试过的代码。
String s=new String("yesterday"+"\u2019"+"s");
...
statement.executeUpdate("INSERT into test1 values ('"+s+"')");
ResultSet rs=statement.executeQuery("select * from test1");
while (rs.next()) {
System.out.println(new String(rs.getString(1).getBytes("UTF-8"),"UTF-8"));
}
...
现在,当我尝试通过命令行执行查看输出时,它总是显示特殊字符:yesterday’s
我的问题是:为什么即使在使用编码之后,它也没有显示出预期的结果。即yesterday’s。是上面提到的代码不正确还是需要修改?
P.S.:在eclipse中,代码可能会产生yesterday’s,但是如果通过命令行执行,它会显示yesterday’s
我正在使用:
-- JDK1.6
-- 甲骨文:11.1.0.6.0
-- NLS_Database_Parameters: NLS_CHARACTERSET WE8MSWIN1252
--Windows
编辑:
\u2019 : 这是RIGHT SINGLE QUOTATION MARK & 我只在寻找这个角色。
【问题讨论】:
-
永远不要在 SQL 查询中使用连接。使用prepared statements。让司机干所有脏活。
-
感谢@vsminkov 的建议,它只是为了表示目的,不会在实际代码中使用它。
-
在 Windows 上?您在控制台中设置的编码可能与 Java 认为的不同(
chcp是您的朋友)。但在这种情况下,只需 println\u2019也应该重现该问题。 -
是的,我正在使用 Windows
-
你为什么要
new String(rs.getString(1).getBytes("UTF-8"),"UTF-8")?这与rs.getString(1)完全相同。
标签: java oracle11g character-encoding special-characters