2010-12-29 10 views
1

Ich bin irgendwie fest auf diesem. Ich bin kein Java oder Orakel Guru, also bitte geben Sie detaillierte Antworten :)oracle + java Codierung Problem beim Einfügen

Ich habe einen Web-Service, der etwas in DB einfügt. Der Web-Service wird auf der Achse gehostet. die db ist Oracle mit folgenden Eigenschaften:

NLS_LANGUAGE AMERICAN 
NLS_TERRITORY AMERICA 
NLS_CHARACTERSET ZHS16GBK 

der Web-Dienst auf Windows Server 2008, Englisch Version gehostet wird, aber ich habe das Gebietsschema des Systems auf chinesisch

nun die Daten nach dem Einsatz Codierung geändert hat Problem und zeigt seltsame Zeichen wie ????, exxk ??

Die JWS-Datei hat GBK-Codierung. und die Daten, die in die DB eingefügt werden, sind fest in der Datei codiert [wir lesen sie nicht von REQUEST]

[edit] nur eine Sache, es ist nicht machbar, die gesamte DB zu utf-8 zu ändern es hat viele Tabelle und Daten

[weiter bearbeiten] Dinge klarer

die Maschine übernimmt Daten von zwei Quelle zu machen. Im Grunde wird es verwendet, um sms/mms an unsere abonnierten Benutzer zu senden und zu empfangen. vor allem arbeitet es mit dem GSM-Operator-Control-Center, wo alle Kodierungen in GBK behandelt werden. Auf der anderen Seite akzeptiert die Maschine auch Anfragen von der Website, um SMS/MMS an die Benutzer zu senden. Hier wird die Codierung in UTF-8 behandelt. Wenn die Webseite eine SMS an den Benutzer senden möchte, ruft sie einen Web-Service auf diesem Rechner auf, der Daten in db einfügt [unser Problem ist hier]. dann überprüft ein Windows-Dienst kontinuierlich die Datenbank und wenn er eine neue Anfrage zum Senden von SMS/MMS findet, wird er die SMS/MMS senden und den Datensatz löschen.

alles funktionierte gut auf der alten Maschine, da es chinesische Version von Windows 2003 hatte. Wir aktualisierten auf einen neuen Server und installierten Windows 2008 Server englische Version darauf. und jetzt sind die Daten verzerrt, nachdem der Web-Service in DB eingefügt hat.

+0

können Sie zeigen, besser die gesamte Verarbeitungspipeline von wo die Daten kommen, wo es verarbeitet wird, wo es gespeichert und schließlich, wie es untersucht. Ich verstehe nicht genau, welche Rolle der Webservice spielt. Können Sie uns sagen, an welcher Stelle in der Pipeline die Daten noch in Ordnung sind? Ich bezweifle, dass die Einfügung selbst das Problem ist, weil sowohl Java als auch Oracle über Kodierungen und Zeichensätze Bescheid wissen und sie sich beschweren, wenn sie es nicht konvertieren können. – Codo

Antwort

1

Setzen Sie den Zeichensatz auf UTF8.

+0

es ist keine machbare Option .. coz gibt es zu viele Tabellen und zu viele Daten ... irgendwelche Tools, um es zu automatisieren? – Ahmad

0

Ich empfehle auch UTF8 als Datenbank-Zeichensatz zu wählen.

Vorsicht, da Java standardmäßig die UTF16-Codierung verwendet. Um die Standard-Kodierung von Java verwendet gesetzt, verwenden Sie die 'file.encoding' Flag:

java -Dfile.encoding = UTF8 ...

ich nie über die ZHS16GBK charset gehört, aber es scheint nicht, unterstützt von Java werden:

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

+1

@arnaud - Java verwendet immer UTF-16-Strings und die Einstellung 'file.encoding' (was nie gemacht werden sollte) wird dies nicht ändern; Die standardmäßige Transcodierungscodierung für E/A ist plattformabhängig. ZHS16GBK ist vereinfachtes Chinesisch und wird von Java unterstützt. Die Verwendung von UTF-8 ist etwas, dem ich zustimmen würde. – McDowell

+0

@McDowell - Nun, wenn Sie UTF-8 aus Dateien, Sockets und so weiter korrekt lesen/schreiben wollen, ist das der einfachste Weg, es zu tun. Aus Neugier, warum wäre es schlecht? ... ja, naja, außer, wenn Sie viele Arten der Kodierung gleichzeitig behandeln wollen, was ein Schmerz in der ... ist ... und warum erscheint ZHS16GBK dann nicht in der Liste der unterstützten Kodierungen? – dagnelies

+0

@arnaud - RE 'file.encoding': _Die Eigenschaft" file.encoding "wird von der J2SE-Plattformspezifikation nicht benötigt; Es ist ein internes Detail der Implementierungen von Sun und sollte nicht durch Benutzercode überprüft oder modifiziert werden. Es soll auch schreibgeschützt sein; Es ist technisch unmöglich, die Einstellung dieser Eigenschaft auf willkürliche Werte in der Befehlszeile oder zu einem anderen Zeitpunkt während der Programmausführung zu unterstützen._ http://bugs.sun.com/view_bug.do?bug_id=4163515 Sie können es tun; du könntest Glück haben. – McDowell