2016-08-26 21 views
0

javaを介していくつかの特殊文字をoracleテーブルに挿入してから、再度取得しようとしました。 以下は私が試したコードです。Java特殊文字エンコーディングの問題

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。上記のコードが正しくないか、何らかの変更が必要ですか?

PS: - JDK1.6

-

オラクル:コマンドラインから実行された場合の日食では、コードはyesterday’sを引き起こすかもしれないが、それは私が使用していますyesterday’s

を示しています。 11.1.0.6.0

- NLS_DATABASE_PARAMETERS:NLS_CHARACTERSET WE8MSWIN1252

--Windows

編集

u2019 \:これは私がこれだけの文字を探していますRIGHT SINGLE QUOTATION MARK &です。

yesterday's 
+0

SQLクエリで連結を使用することはありません。 [prepared statements](http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)を使用してください。運転手にすべての汚れた作業をさせてください。 – vsminkov

+0

提案のための@vsminkovは、実際のコードでは使用しません。 –

+1

Windowsの場合は?あなたは、Javaが信じるよりも、おそらくコンソールに別のエンコーディングを設定しているでしょう( 'chcp'はあなたの友人です)。しかし、この場合、単にprintln '\ u2019'も問題を再現するべきです。 – mihi

答えて

0

問題は、アポストロフィの文字エンコーディングはu0027

私は、コマンドラインでこれを実行し\ているということですプロパティ "file.encoding"コマンドラインで実行すると、 "UTF-8"以外に設定され、コマンドラインで出力するときにテキストが正しく表示されないことがあります。

+0

私は編集した質問を\ u2019右一重引用符であり、私はこの文字のみを探しています。 –

2

チェックのjava:それはの結果

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

1

ここに私がコメントで提案したもの(あなたのクライアントの文字セットを変更する)のイラストがあります。ストレートプラス私のSQL *から:

SQL> select unistr('\2019') from dual; 

U 
- 
Æ 

SQL> $chcp 1252 
Active code page: 1252 

SQL> select unistr('\2019') from dual; 

U 
- 
’ 

これはあなたのために働く場合、あなたの[g]login.sql$chcp 1252を追加することもできます。

関連する問題