我尝试通过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
- Oracle:11.1.0.6.0
- NLS_Database_Parameters:NLS_CHARACTERSET WE8MSWIN1252
- 视窗
修改:
\ u2019:这是RIGHT SINGLE QUOTATION MARK&我只是在寻找这个角色。
答案 0 :(得分:2)
在命令行上运行时检查java属性“file.encoding”,它可能被设置为“UTF-8”以外的其他内容,导致在命令行输出时文本显示不正确。
答案 1 :(得分:1)
以下是我在评论中建议的内容(更改客户端的字符集)。直接来自我的SQL * Plus:
SQL> select unistr('\2019') from dual;
U
-
Æ
SQL> $chcp 1252
Active code page: 1252
SQL> select unistr('\2019') from dual;
U
-
’
如果这对您有用,您可能需要将$chcp 1252
添加到[g]login.sql
。
答案 2 :(得分:0)
问题是撇号的字符编码是\ u0027
我在命令行中运行了这个:
public class Yesterday{
public static void main(String[] args) {
String s = new String("yesterday" + "\u0027" +"s");
System.out.println(s);
}
}
导致:
yesterday's