Java特殊字符编码问题

时间:2016-08-26 18:48:59

标签: java oracle11g character-encoding special-characters

我尝试通过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&我只是在寻找这个角色。

3 个答案:

答案 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