質問

ヨーロッパのさまざまな言語の文字列を含む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"> 

ジムに感謝します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top