2

さまざまなヨーロッパ言語の文字列を含むASPAccessデータベースがあります。データベースには、それぞれの国のエージェントが事前に入力していました。予想どおり、アクセント付きなどの文字を含むエントリが含まれています。MS Accessでデータベースを開くと、これらの文字は正常に表示されます。たとえば、ドイツ語で「Open」に相当するものは「Öffnen」と表示されます(上に2つのドットが付いた「O」が表示されることを願っています!)。

データベースを読み取り、XMLでレコードを返すASPコードがあります。テキストはXMLEncodeに渡されてXMLが作成されますが、これは「<」、「&」などの5つの特殊機能のみを処理しているようです。XMLをダンプしても、アクセント記号付きの文字は変更されません。

<English>Open</English>
<German>Öffnen</German> 

Wiresharkで生のパケットを見ると、「Ö」バイトが16進数のD6であることがわかります。これは、UnicodeとISO8859-1の10進数の値のようです。

問題は、クライアント側の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を受け入れさせるにはどうすればよいですか?

ブラウザに正しく表示させるにはどうすればよいですか?

4

2 に答える 2

1

XMLがUTF-8でエンコードされていることをどのように知っていますか?MS環境についてはよくわかりませんが、Javaでよくある問題は、encoding="UTF-8"ヘッダーを書き込むだけでUTF-8でエンコードされると想定することです。また、実際にUTF-8を書き込むようにライターを構成する必要があります。

Wiresharkが16進数のD6を表示しているとのことですが、これは、ヘッダーの内容に関係なく、ストリームが実際にはUTF-8でエンコードされていないことを示しています。

于 2010-05-28T20:52:51.117 に答える
0

理由はよくわかりませんが、動作させることができました。ジムのコメントに促されて、XMLと応答のエンコーディングを8859-1からUTF-8に戻し、ページのMETAタグのエンコーディングも変更しました。

IEで問題なく動作するようになり、ブラウザに正しい文字が表示されるようになりました。

今回はWiresharkで生のバイトもチェックしました。「Ö」文字はXMLで0xD6の1バイトではなく2バイト(0xC3、0x96)としてエンコードされています。

要約すると:

XML応答ヘッダーを生成するサーバー側のASPコード:

return ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") ;

応答自体を生成するサーバー側のASPコード:

Response.ContentType = "text/xml; charset=UTF-8" ;
Response.Write (XMLResponse) ;

およびWebページのヘッダー:

<head>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> 

ジムに感謝します。

于 2010-05-29T01:01:06.913 に答える