マルチバイトキャラクターが破損しました。データベースから読み込まれてhttpurlConnectionを使用してASPページに投稿されたとき
-
15-11-2019 - |
質問
私のJavaコードでは、データベースからのマルチバイトデータを検索し、一部のノードの値としてそのデータを、DOMを文字列に変換してhttpurlConnectionを介してASPページに転記することを除いて、そのデータをXML DOMにしています。データを終了するのは????いくつかのマルチバイト値の代わりに。何をすべきかを提案してください。
私がすでにやっていること..
1)システムプロパティとして-Dfile.encoding =UTF8
を設定しました
2)XML DOMをStringに変換するためのTransformerFactory
を使用している間、を設定しました
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8")
.
符号化が適切であることを確認する。 私が間違っているところを提案してください。
@Jon SKEETここに追加されたものがいくつかあります... 1)データベースからデータを正しく取得しています2)私のローカルファイルシステムに保存することによってチェックされたときに、変換されたXMLも適切に見えます。
以前に投稿するために私はのようなものを使っていました
'dout = new DataOutputStream(urlconn.getOutputStream());'
'dout.write(strXML.getBytes());'
'dout.write(strXML);'
.
と受信者の終了時のデータが変換されました。しかし、私は
に切り替えました
'
dout=new OutputStreamWriter(urlconn.getOutputStream(),"UTF8");'
'dout.write(strXML);'
.
その後、受信側のデータでは適切なように見えますが、この場合は受信側終了時に処理される方法で問題が発生します。私の受信者ASPコードでは、objStream.WriteLine (oXMLDom.xml)
を使用しています
...そしてそれは失敗して内部サーバーエラーを与え始めます... 2番目のアプローチで何が間違っているかをお勧めします。
解決
There are lots of potential conversions going on there. You should verify the data at every step:
- Check that you're getting it out of the database correctly
- See what the transformed XML looks like
- Watch what goes over the network (including HTTP headers)
- Check exactly what you're getting in ASP
Don't just print out the strings as strings - log the Unicode value of each character, by casting it to int
:
for (int i = 0; i < text.length(); i++)
{
char c = text.charAt(i);
log("Character " + c + " - " + (int) c);
}