【问题标题】:Java Special character encoding issueJava 特殊字符编码问题
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这是我在评论中建议的说明(更改客户端的字符集)。直接来自我的 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

    【讨论】:

      【解决方案3】:

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

      我在命令行中运行了这个:

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

      结果:

      yesterday's
      

      【讨论】:

      • 我编辑了问题,\u2019 是右单引号,我只在寻找这个字符。
      猜你喜欢
      • 2017-06-03
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多