Web サイトのロシア語版を作成したいと考えている顧客がいます。フロントエンドとバックエンドに UTF-8 エンコーディングを使用していますが、データベースを通じて生成された静的なロシア語情報が文字化けしてしまいます。 GB2312 を使用して表示すると、データベースを通じて生成された静的なロシア語情報は正しく表示されますが、テンプレート ファイル内のロシア語のテキストは文字化けします。具体的な特徴は以下のとおりです。
1. テンプレートを通じて通常のロシア語を実現します。
2. バックエンド データベースを通じて生成された静的なロシア情報は、バックエンドでは正常に表示されますが、フロントエンドでは文字化けします。
3. 英語は普通です。
トピックに関連する類似または異なる表現
FSO は UTF-8 でエンコードされたファイルを書き込みます
FSO はどのようにして utf-8 エンコードされたファイルを生成できますか?
FSO によって生成されるファイルのデフォルトのエンコード形式は何ですか?
UTF-8エンコードに変換する方法
静的 Web ページを生成する FSO に関する問題
FSO を使用して ASP でファイルを生成するコードは次のとおりです。
次のようにコードをコピーします。
関数 createfile(sfilename,scontent)
set fso=server.CreateObject(scripting.filesystemobject)
set f1=fso.opentextfile(sfilename,2,true,-1)
f1.write(scontent)
f1.close
fso=何も設定しない
終了関数
fso.opentextfile(sfilename,2,true,-1) 最後のパラメータ -1 は、エンコード形式を Unicode として指定します。エンコード形式が Unicode の場合、Web ページは UTF-16 リトルエンディアンを表示します。
OpenTextFile メソッド
指定されたファイルを作成し、作成されたファイルの読み取りまたは書き込みに使用できる TextStream オブジェクトを返します。
object.OpenTextFile(ファイル名[, iomode[, create[, format]]])
パラメータオブジェクト、必須。 FileSystemObjec または Folder オブジェクトの名前である必要があります。 これがfsoです。
ファイル名、必須。作成するファイルを指定する文字列式。 ここにファイル名があります。
iomode はオプションのパラメータで、ファイルが読み取り、書き込み、追加のいずれに使用されるかを示します。デフォルト値は読み取りの場合は 1、書き込みの場合は 2、追加の場合は 8 です。
create、オプションのパラメータ。ファイルが存在しない場合にファイルを作成するかどうか。デフォルトは false で、作成する場合は true に設定します。
format の場合、パラメータは次の設定のいずれかになります。デフォルトは ASCII 形式で、必要な utf-8 はありません。
TristateUseDefault -2 は、システムのデフォルト形式でファイルを開きます。
TristateTrue -1 は、ファイルを Unicode 形式で開きます。
TristateFalse 0 ファイルを ASCII 形式で開きます。
FSO のエンコード属性は 3 つだけで、システムのデフォルトは Unicode と ASCII であり、必要な utf-8 はありません。したがって、中国のシステムで FSO コンポーネントを使用して生成されたファイルは、通常、gb2312 エンコード形式になります。
解決策 1
GB2312 エンコーディングにロシア語の文字が含まれている場合、ページが簡体字中国語 GB2312 に設定されている場合、ロシア語は通常どおり表示されます。ただし、中国語はデフォルトで Song フォント表示になっているため、ロシア語は Song フォントで全角文字として表示されます。そのため、New Roman や Arial などの外国のフォントを使用する必要があります。中国人の顧客はそこで通信できますが、本物のロシア人がウェブを閲覧する場合は中国語をダウンロードしてインストールする必要があり、これは理想的ではなく、ウェブの閲覧を断念する可能性があります。
解決策 2
ASP は古い言語であるため、一部の機能では UTF-8 のサポートが非常に不十分です。 FSO では、必要なファイル形式を指定できないため、UTF-8 形式でのファイルの直接生成はサポートされていません。たとえば、UTF-8 形式でファイルを生成する場合、一般的に使用される Scripting.FileSystemObject オブジェクトは使用できません。私たちは考え方を変えて、Adodb.Stream を使用する必要があります。これが、zblog などの現在のブログ プログラムの実装方法です。
ファイルを作成する Scripting.FileSystemObject オブジェクトの機能は次のとおりです。
FileSystemObject.CreateTextFile(ファイル名[,上書き[,unicode]])
unicode 属性は次のように記述されます。
オプション。ファイルを Unicode または ASCII ファイル形式で作成するかどうかを示すブール値。ファイルが Unicode ファイル形式で作成された場合はこの値が True になり、ASCII ファイル形式で作成された場合は False になります。このセクションを省略した場合、ASCII ファイルが作成されるものとみなされます。
残念ながら、この機能を使用して UTF-8 形式のファイルを作成することはできません。
ADODB.Stream オブジェクトを使用します。使用法については以下を参照してください。
次のようにコードをコピーします。
objStream = Server.CreateObject(ADODB.Stream) を設定します。
objStreamを使用する場合
。開ける
.Charset = utf-8
.Position = objStream.Size
.WriteText=str
.SaveToFile サーバー.マップパス(/sitemap.xml),2
。近い
で終わる
objStream = なしを設定します
付録: ASCII、Unicode、および UTF-8 の概要
ASCII は、大文字と小文字の英字、数字、制御文字などを含む文字セットです。1 バイトで表され、範囲は 0 ~ 127 です。
ASCII で表される文字は非常に限られているため、各国または地域はこれに基づいて独自の文字セットを提案しています。たとえば、中国で広く使用されている GB2312 は、漢字のエンコーディングを提供し、2 バイトで表されます。
これらの文字セットは互いに互換性がなく、同じ数字が異なる文字を表す可能性があり、情報交換に問題が発生します。
Unicode は、世界中のすべての文字を一意の番号 (コード ポイント) (文字 a に対応する番号 0x0041 など) にマップする文字セットです。 Unicode はまだ開発中であり、含まれる文字はますます増えています。
Unicode で表される文字を格納する場合は、Unicode でエンコードされた文字を表すために 2 バイトを使用する UCS-2 などの特定のエンコード方式が必要です。 UTF-8 は Unicode 文字セットのもう 1 つのエンコード方式で、最大 6 バイトの可変長であり、127 未満の文字は 1 バイトで表現されるため、ASCII 文字セットと同じ結果になります。互換性が高く、ASCII エンコーディングの英語テキストを変更せずに UTF-8 エンコーディングとして処理でき、広く使用されています。