web-dev-qa-db-ja.com

クラシックASPテキスト置換とUTF-8エンコーディング

ClassicASPを使用するWebサイトがあります。

リリースプロセスの一部でファイル内の値が置き換えられ、ファイルがUTF-8として書き出されるバグが見つかりました。

これにより、アプリケーションはゴミを吐き出し始めます。アポストロフィは、エンコードされた文字として返されます。

次に、このファイルがUTF-8であるというBOMを削除すると、以前はガベージとしてレンダリングされていたテキストが正しく表示されるようになります。

IISがUTF-8ファイルに遭遇したときに異なる動作をするものはありますか?

16
Derek Ekins

UTF-8はBOMを使用しません。それはそれらをそこに置くいくつかのマイクロソフトソフトウェアの厄介な誤動作です。リリースプロセスのどのステップでUTF-8でエンコードされたBOMをファイルに配置しているかを見つけて修正する必要があります—であっても、それを停止する必要があります-)UTF-8を使用します。これは、最近では本当に最適です。

しかし、IISが表示の問題を引き起こしているのではないかと思います。ブラウザが最終的に表示されるページの文字セットを推測している可能性が高く、UTF-8でエンコードされているように見えるバイトを検出すると推測します。ページ全体がUTF-8です。HTTPヘッダーを使用して最終的な文字セットを指定することで、これを停止できるはずです。

Content-Type: text/html;charset=iso-8859-1

および/またはHTMLのメタ要素

<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />

これで(ISO-8859-1が実際にデータの文字セットであると仮定して)OKと表示されるはずです。ただし、ファイルの先頭にUTF-8でエンコードされたBOMが実際に含まれている場合は、ページに「ï"¿」と表示されます。これは、ISO-8859-1でのバイトの外観です。したがって、そのmisBOMを取り除く必要があります。

9
bobince

私は昨日同じ正確な問題を検索していて、出くわしました:

http://blog.inspired.no/utf-8-with-asp-71/

そのページの重要な部分、それがなくなった場合に備えて...

ASPコード:

Response.ContentType = "text/html"
Response.AddHeader "Content-Type", "text/html;charset=UTF-8"
Response.CodePage = 65001
Response.CharSet = "UTF-8"

および次のHTMLMETAタグ:

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

メタタグとaspCharSetプロパティを使用していましたが、それでもページは正しくレンダリングされませんでした。他の3行をaspファイルに追加した後、すべてが正常に機能しました。

お役に立てれば!

18
Werewolf

Access DBを使用している場合は、次のように記述します。

Session.CodePage=65001
Set tabtable= Conn.Execute("SELECT * FROM  table")
2
user2389005