Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java特殊字符编码问题_Java_Oracle11g_Character Encoding_Special Characters - Fatal编程技术网

Java特殊字符编码问题

Java特殊字符编码问题,java,oracle11g,character-encoding,special-characters,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 (

我试图通过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"));
  }
  ...
现在,当我试图通过命令行执行查看输出时,它总是显示特殊字符:
beday€™s

我的问题是:为什么即使使用了编码,它也没有显示预期的结果。i、 e.
昨天的
。上述代码是否不正确或需要修改

注意:在eclipse中,代码可能会产生昨天的
,但是如果通过命令行执行,它会显示昨天的
™s

我正在使用:

--JDK1.6

--甲骨文:11.1.0.6.0

--NLS_数据库_参数:NLS_字符集WE8MSWIN1252

--窗户

编辑


\u2019:这是&我只查找这个字符。

问题是撇号的字符编码是\u0027

我在命令行中运行了以下命令:

public class Yesterday{
    public static void main(String[] args) {
        String s = new String("yesterday" + "\u0027" +"s");
        System.out.println(s);
    }
}
结果是:

yesterday's

在命令行上运行时,请检查java属性“file.encoding”,它可能被设置为“UTF-8”以外的值,从而导致在命令行上输出时文本显示不正确。

下面是我在注释中建议的示例(更改客户端的字符集)。直接从我的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]登录名中。sql

永远不要在sql查询中使用串联。使用。让驱动程序做所有的脏活。谢谢@vsminkov的建议,它只是为了表示的目的,不会在实际代码中使用它。在Windows上?您可能在控制台中设置了不同于Java所认为的编码(
chcp
是您的朋友)。但是在这种情况下,只需println
\u2019
就可以重现这个问题。是的,我正在使用Windows为什么要使用
新字符串(rs.getString(1).getBytes(“UTF-8”),“UTF-8”)
?这与刚才的
rs.getString(1)
完全相同。我编辑了问题,\u2019是右单引号,我只查找这个字符。