FSO によって生成される Web ページ ファイルのデフォルトのエンコード形式と UTF-8 エンコードへの変換方法に従って、Adodb.Stream オブジェクトを使用して関数を記述し、UTF-8 Web ページ ファイルが正常に生成されます。次の関数は FSO オブジェクトを使用し、ファイルの場所は FSO.ASP です。 FSO オブジェクトのファイル エンコーディング属性は 3 つだけであり、システムのデフォルトは Unicode、ASCII であり、必要な UTF-8 はありません。したがって、通常、中国語のシステムで FSO オブジェクトを使用して生成されたファイルは gb2312 Web にあります。ページのエンコード形式が異なり、UTF-8 エンコードを生成できないため、英語や中国語などのラテン語は正常に表示されますが、ロシア語などの非ラテン語ではページが文字化けします。
次のようにコードをコピーします。
関数 createfile(sfilename,scontent)
set fso=server.CreateObject(scripting.filesystemobject)
'set f1=fso.opentextfile(sfilename,2,true,-1) 'append=8 書き込み=2 のみ Unicode エンコーディング=-1
set f1=fso.opentextfile(sfilename,2,true)
f1.write(scontent)
f1.close
fso=何も設定しない
終了関数
STREAM クラスには LOADFROMFILE メソッドと SAVETOFILE メソッドがあり、FSO にはない重要な属性 CHARSET があるため、ADODB.STREAM オブジェクトを使用して FSO オブジェクトを置き換えることを選択します。次の関数は Adodb.Stream で記述されており、UTF-8 Web ページ ファイルを正常に生成します。
次のようにコードをコピーします。
関数 createfile(sfilename,scontent)
objStream = Server.CreateObject(ADODB.Stream) を設定します。
objStreamを使用する場合
。開ける
.Charset = utf-8
.Position = objStream.Size
.WriteText=scontent
.SaveToFile ファイル名,2
。近い
で終わる
objStream = なしを設定します
終了関数
FSO を使用したプログラムの場合、関数を変更し、関数名を変更しない限り、正常に実行できるため、トラブルが少なく便利です。
テンプレートを使用してファイルを生成する場合は、テンプレート ファイルを UTF-8 エンコーディングで読み取る必要があります。そうしないと、正しいファイル エンコーディングがバックグラウンドで解放されますが、テンプレート ファイルは FSO の GB2312 エンコーディングで読み込まれます。テンプレート ページがロシア語またはその他の非ラテン語で書かれている場合、文字化けが発生します。関数は次のように変更されます。
元々使用されていたFSOのREADFILE関数
次のようにコードをコピーします。
関数 readfile(ファイル名)
fso=server.CreateObject(scripting.filesystemobject) を設定します。
Set f = fso.OpenTextFile(sfilename, 1, true)
f.AtEndOfStream でない場合は、readfile = f.readAll
f=何も設定しない
fso=nothing を設定します
終了関数
ADODB.STREAM の READFILE 関数を置き換えます。
実際の必要に応じて、関数 readfile (sfilename, charset) charset パラメータ charset を削除または保持することに注意してください。
次のようにコードをコピーします。
関数 readfile(ファイル名)
f
stm=server.CreateObject(adodb.stream) を設定します。
stm.Type=2 'このモードで読み取ります
stm.mode=3
stm.charset=utf-8
stm.open
stm.loadfromfile ファイル名
f=stm.readtext
stm.閉じる
stm=何も設定しない
読み取りファイル=f
終了機能
ファイルエンコーディングとWebページエンコーディングについては、文字セットCharsetとファイルエンコーディングEncodingの違いの詳細説明を参照してください。
その他のサンプルプログラム
次のようにコードをコピーします。
'------------------------------------------------
'関数名: ReadTextFile
'機能: AdoDb.Stream オブジェクトを使用して、UTF-8 形式のテキスト ファイルを読み取ります
'------------------------------------------------ - --
関数 ReadFromTextFile (FileUrl,CharSet)
ディムストラ
stm=server.CreateObject(adodb.stream) を設定します。
stm.Type=2 'このモードで読み取ります
stm.mode=3
stm.charset=CharSet
stm.open
stm.loadfromfile サーバー.MapPath(FileUrl)
str=stm.readtext
stm.閉じる
stm=何も設定しない
ReadFromTextFile=str
終了機能
'------------------------------------------------
'関数名:WriteToTextFile
'機能: AdoDb.Stream オブジェクトを使用してテキスト ファイルを UTF-8 形式で書き込みます
'------------------------------------------------ - --
サブ WriteToTextFile (FileUrl、byval Str、CharSet)
stm=Server.CreateObject(adodb.stream) を設定します。
stm.Type=2 'このモードで読み取ります
stm.mode=3
stm.charset=CharSet
stm.open
stm.WriteText str
stm.SaveToFile サーバー.MapPath(FileUrl),2
stm.flush
stm.閉じる
stm=何も設定しない
エンドサブ
その中で、この行 stm.SaveToFile server.MapPath(FileUrl),2 のパスの問題に注目してください。