2016-08-16 11 views
1

ASPページ上の任意の入力または出力がある場合は魔法のようにthis sort of thing作品:ASP classic:ADODBの文字エンコードを決定する要因は何ですか?

<%@ LANGUAGE="VBScript" CodePage = 65001 %> 
<% 
    Response.CharSet = "UTF-8" 
    Response.CodePage = 65001 
%> 

しかし、それは純粋なVBSを実行するASPページだと私はMSにパラメータとして非ラテン文字の文字列を渡す場合SQL sprocをServer.CreateObject("ADODB.Command")経由で実行すると、コマンドが実行され、MS SQLがvarchar列に置かれたときの間の一連の?文字に変換されます。

ただし、同じASPページでUTF-8エンコーディングでデータベースにこのような文字列を挿入するIISのインスタンスが1つあります。それを可能にするIIS設定が見つからないので、ADODB.Commandパラメータ値を強制的にUTF-8に変換できますか?

+0

UTF-8でエンコードされた文字をSQL Serverに渡す場合は、「VARCHAR」ではなく「NVARCHAR」列に配置する必要があります。これは、エンコーディングの不一致を説明します。パラメータとして、それぞれ 'adVarWChar'または' adLongVarWChar'のデータ型を使用するべきです。 – Lankymart

+0

@Lankymart - 私はそのADOデータ型フラグを使って今すぐテストします。私は、DBカラム*がNVARCHARであるべきであることを知っていますが、それはレガシーシステムです。 [ASPが別のIISサーバーから実行されたときに、まったく同じデータベースとコードがUTF-8でエンコードされた文字列を受け取っていた可能性があります](http://serverfault.com/q/796971/350508) – feetwet

+0

興味深い質問ですが、両方のサーバーで同じプロバイダが使用されていますか?また、ページが何をしているか、つまりフォームからデータを投稿しているかどうかにも依存します。 – Lankymart

答えて

1

ASP文字エンコーディングは気まぐれなことがあります。コードベースで169 ASPファイルがUTF-8-BOMエンコーディングで保存されていました。あるマシンにはデプロイされましたが、もう一方にはデプロイされません含まれていたのは、いくつかのVBS FUNCTIONの定義でした。しかし、BOMエンコーディングを含むファイルを含むASPはすぐにUDF-8でADODB.Commandパラメータを追加できなくなりました。代わりに、それは明らかに–を決定したが、ADODB.Commandの目的だけではなく、JSON PUTのMSXML2.ServerXMLHTTPオブジェクト–に対しては、ASCII以外のものはすべて?であると判断した。

これはそれです:コードファイルをUTF-8-BOMとASPブレークとして保存します。それをUTF-8として保存してください。

169個のASPファイルのうち1つが数十のディレクトリに分散していることが、「間違った」エンコードを使用して保存されていることをどのように発見できますか?知りません。私は幸運にも、最近の仕事がどこで行われたのか知っていて、Notepad ++でファイルのエンコーディングをチェックしていました。

古典的なASPを混乱させる2つの異なるエンコーディングがありますか?私は知らないが、here's at least one other answer that suggests that BOM encoding causes problems

+0

うん、それをやるよ、良いキャッチ。 – Lankymart

関連する問題