ラテン文字によるデータベースコンテンツのXMLエンコード
-
05-10-2019 - |
質問
ヨーロッパのさまざまな言語の文字列を含むASPアクセスデータベースがあります。データベースは、それぞれの国のエージェントが以前に入力されていました。予想されるように、アクセントなどのキャラクターを含むエントリが含まれています。 MSにアクセスしてデータベースを開くと、これらの文字が正常に表示されます。たとえば、ドイツの「オープン」に相当するものは、「Öffnen」として表示されます(うまくいけば、2つのドットの上に「O」を見ることができます!)。
データベースを読み取り、XMLのレコードを返すASPコードがあります。テキストはXMLENCODEに渡されてXMLを構築しますが、それは「<」、」、「」などの5つのスペシャルを扱っているように見えます。XMLをダンプすると、アクセントされた文字が変更されません。
<English>Open</English>
<German>Öffnen</German>
Wiresharkで生のパケットを見ると、「Ö」バイトがヘックスD6であることがわかります。
問題は、クライアント側のJSでXMLを解析しようとすると始まります。わかりました:
"An invalid character was found in text content"
IEから。 FFとChromeは、しゃっくりなしでXMLを喜んで受け入れますが、ブラウザは「Ö」キャラクターをダイヤモンドとして表示します。
http://www.validome.org/xml/validate/ 「エラーのエンコード」を報告します。
http://www.w3schools.com/dom/dom_validate.asp 大丈夫だと思います。
XMLはUTF-8エンコードされています。
IEに苦情なしでXMLを受け入れるには何をする必要がありますか?
ブラウザに物を正しく表示するために何をする必要がありますか?
解決
XMLがUTF-8エンコードされていることをどのように知っていますか?私はMS環境をよく知りませんが、Javaでは一般的な問題は、ただ書くだけであると仮定することです encoding="UTF-8"
ヘッダーにより、UTF-8エンコードされます。また、実際にUTF-8を書くようにライターを構成する必要があります。
WiresharkはHex D6を示していると言いました。これは、ヘッダーが何を言っているかに関係なく、ストリームが実際にUTF-8エンコードされていないことを示しています。
他のヒント
まあ、なぜ私は完全にはわかりませんが、私はそれを機能させることができました。 Jimのコメントに促されて、XMLと応答エンコードを8859-1からUTF-8に変更しました。また、ページのメタタグのエンコードも変更しました。
IEで苦情なしで動作するようになり、ブラウザが正しい文字を表示するようになりました。
また、今回はWiresharkで生のバイトをチェックしました。「Ö」文字は、0xD6の1バイトではなく、XMLで2バイト(0xc3、0x96)としてエンコードされています。
要約すると:
XML応答ヘッダーを生成するためのサーバー側ASPコードで:
return ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") ;
サーバー側のASPコードで、応答自体を生成します。
Response.ContentType = "text/xml; charset=UTF-8" ;
Response.Write (XMLResponse) ;
ウェブページヘッダー:
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
ジムに感謝します。