2009-09-21 17 views
10

Classic ASPを使用するWebサイトがあります。従来のASPテキスト置換とUTF-8エンコーディング

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

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

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

IISがファイルをUTF-8で検出したときに、別の方法がありますか?

+0

を書くべきdbのアクセスを使用している場合は? – AnthonyWJones

答えて

6

UTF-8はBOMを使用しません。 Microsoftソフトウェアの中には、迷惑な誤った機能があります。リリースプロセスのどの段階でUTF-8エンコードされたBOMをファイルに入れて修正する必要がありますか?(UTF-8を使用していても)が最善の方法です。

しかし、表示の問題を引き起こすのはIISだとは限りません。ブラウザが最終的に表示されるページの文字セットを推測している可能性が高く、UTF-8のように見えるバイトを見ると、ページ全体がUTF-8であると推測されます。あなたは、HTTPヘッダー使用して決定的な文字セットを示すことによって、それがいることをやって停止することができるはずです。今

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

HTMLに

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

および/またはmeta要素を(ISO-8859-1を想定し1は実際にデータが入っている文字セットです)、OKと表示されます。しかし、あなたのファイルが最初にUTF-8でエンコードされたBOMを実際に持っている場合は、あなたのページでは、これらのバイトがISO-8859-1のように見えるようになります。だからあなたはまだmisBOMを取り除く必要があります。

+0

これは意味があります。 実際にこの種の問題を処理するために書かれたコードのバグでした。おかげさまで –

+1

私はこの答えが私を混乱させることを認めなければなりません。「UTF-8はBOMを使用していません。どのような意味でこれは「誤った」ものですか?私はこのゼロ幅の空白文字を含むUTF-8ファイルを使用して問題を見つけたことはありませんでした。どのような問題が発生しましたか? – AnthonyWJones

+0

ファイルの先頭に ""が付いていると、バイトベースのテキストツール(シェル、設定ファイルローダーなど)はすぐに転がります。 Unicodeについて何も知らないツールと互換性があることがUTF-8の明白な目的ですが、UTF-8 + BOMはこれを打破します。 BOMはUTF-16のUnicodeデコード処理でのみ存在し、自動的に削除されるため、Unicode対応のツールでさえも上書きされます。 UTF-8 + BOMはアプリケーションを中断させ、Unicode仕様での使用を正当化するものではありません。 UTF-8にはバイトオーダーの問題がないため、それには何のメリットもありません。 – bobince

13

私は昨日とまったく同じ問題での検索と出会った。そのページから

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" 

および次のHTML METAタグ:

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

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

希望すると便利です。

+1

メタタグと 'Response.CharSet =" UTF-8 "の両方が同じ目的を果たしているので、私は個人的には明示的に設定するのではなく' Response.CharSet = "UTF-8"それは[タグ:HTML]のメタタグとして。また、 'Response.AddHeader" Content-Type "、" text/html; charset = UTF-8 "'は 'Response.ContentType =" text/html "と' Response.CharSet = "UTF- 8 "'あなたが示唆していることは無意味で、 'Response.ContentType'と' Response.CharSet'を使うことに固執します。 – Lankymart

+0

あなたの貢献のために非常にhepfull @Werewolf thx u .. – Artemination

+0

あなたは私の人生を保存:) – kyawagwin

2

あなたはUTF-8 BOMを削除すると、ページが正しくレンダリングするために発生した場合、コンテンツが確実にUTF-8ではありません

Session.CodePage=65001 
Set tabtable= Conn.Execute("SELECT * FROM table") 
関連する問題