2010-12-29 15 views
1

私はこの問題に悩まされています。私はJavaやOracleの教祖ではないので、詳細な答えを教えてください:)oracle + javaのエンコード中に問題があります

私はDBに何かを挿入するWebサービスがあります。 Webサービスは軸でホストされます。デシベルは、次のプロパティを持つoracleです:

NLS_LANGUAGE AMERICAN 
NLS_TERRITORY AMERICA 
NLS_CHARACTERSET ZHS16GBK 

ウェブ・サービスは、Windows Server 2008でホストされている英語版が、私は今、挿入後のデータをエンコードしている中国の

にシステムのロケールを変更していています????、exxkのような奇妙な文字を表示しますか?

jwsファイルにはGBKエンコーディングがあります。 DBに挿入されたデータはファイルにハードコードされています[私たちはREQUESTからそれを読んでいません]

[編集] ただ1つのことですが、DB全体をutf-8に変更することはできませんそれは

マシン物事をより明確にする二つのソースからデータを受け入れるための

[さらに編集]テーブルの多くのデータを持っています。基本的には、購読しているユーザーにsms/mmsを送受信するために使用されています。主に、すべてのエンコーディングがGBKで処理されるGSMオペレータコントロールセンターで動作します。一方、マシンは、ユーザにSMS/MMを送信するためのウェブサイトからの要求も受け入れる。ここで、エンコーディングはUTF-8で処理されます。ウェブサイトがユーザーにSMSを送信したい場合、このマシン上でWebサービスを呼び出し、dbにデータを挿入します[ここに問題があります]。 Windowsサービスは継続的にDBをチェックし、sms/mmsを送信するための新しい要求があれば、sms/mmsを送信してレコードを削除します。

中国語版のWindows 2003を使用していたため、古いマシンではすべて正常に動作していました。新しいサーバーにアップグレードし、Windows 2008 server english versionをインストールしました。 WebサービスがDBに挿入された後にデータが歪められます。

+0

あなたはより良いデータは、それが処理されていますどこに、それが保存されている場所に、最終的には、それを調べていますどのように、来ているところから、全体の処理パイプラインを表示することができます。私は、Webサービスの役割が何であるかはよく分かりません。パイプラインのどの時点でデータがまだ問題ないか教えていただけますか? JavaとOracleの両方がエンコーディングと文字セットを認識しており、変換できないと文句を言うので、挿入自体が問題であるとは思わない。 – Codo

答えて

1

キャラクタセットをUTF8にします。

+0

実行可能なオプションではありません..余りにも多くのテーブルとあまりにも多くのデータがあります...それを自動化するツールはありますか? – Ahmad

0

また、データベースの文字セットとしてUTF8を選択することをお勧めします。

Javaは、デフォルトではUTF16エンコーディングを使用しているので、注意してください。私はZHS16GBK文字セットについて聞いたことはありませんが、それはいないようです

のjavaの-Dfile.encoding = UTF8 ...「のfile.encoding」フラグを使用して、Javaので使用されるデフォルトのエンコーディングを設定するには ジャワによって支持される:

http://download.oracle.com/javase/1.4.2/docs/guide/intl/encoding.doc.html

+1

@arnaud - Javaは常にUTF-16文字列を使用し、 'file.encoding'(決して実行しないでください)を設定してもこれは変わりません。 I/Oのデフォルトのトランスコーディングエンコーディングはプラットフォームに依存します。 ZHS16GBKは簡体字中国語であり、Javaによってサポートされています。 UTF-8を使用することは、私が同意するものです。 – McDowell

+0

@McDowell - ファイルやソケットなどからUTF-8を正しく読み書きするには、これが最も簡単な方法です。好奇心の理由から、なぜそれは悪くなるのだろうか? ...ええ、まあ、いろいろな種類のエンコーディングを一度に処理したいのであれば、これは苦痛です...そして、なぜZHS16GBKはサポートされているエンコーディングのリストに現れませんか? – dagnelies

+0

@arnaud - RE 'file.encoding':_" file.encoding "プロパティは、J2SEプラットフォーム仕様では必須ではありません。これはSunの実装の内部詳細なので、ユーザーコードで検証または変更しないでください。それはまた、読み取り専用であることを意図しています。このプロパティの設定をコマンドライン上の任意の値に設定することも、プログラムの実行中にいつでも行うことも技術的に不可能です._ http://bugs.sun.com/view_bug.do?bug_id=4163515これは実行できます。あなたは幸運になるかもしれません。 – McDowell

関連する問題