私は問題を抱えていて、何が原因なのか理解できません。私はClassic ASPで書かれたレガシーWebサイトに取り組んでいます(ああ、なぜ私なのか)、ADODB.Recordsetの値が二重にエンコードされて出力される説明なしに、ランダムな時間に表示されることがあります。
二重エンコードとは、「 UTF-8 マルチバイト文字列の ASCII 表現の UTF-8 エンコード」を意味するため、「é」は「 é 」のようになります(まったく同じエンコードで)。
私を夢中にさせているのは、これがランダムな時間に発生するように見えることです。50% の時間は正しくエンコードされ、残りの 50% はそうではありません。
異なる時間に同じページで発生することを指摘しておきます。そのため、いくつかのページをロードした後、それらを正しく表示したり、壊れたり、再び正しく表示したりできます。
これは 7 年前、この Web サイトの初期の頃に起こりましたが、多くの水が橋の下を通過し、最初にこの Web サイトで働いていた人のうち、まだ会社で働いているのは 1 人だけです。彼は、問題を解決するために彼らが何をしたか思い出せず、「データベース接続のエンコーディングはセッションに保存された」ということだけを残しましたSession.CodePage = 65001
。
クエリを介して文字セットを強制しようとしましたutf8
が、明らかに機能しませんでした。
使用するドライバーは oldeMySQL ODBC 3.51 Driver
です。
アドバイスや解決策を事前に感謝します (残念ながら Classic ASP を取り除くことはできません)。
[アップデート]
これはプロットのひねりです。内容を次のように出力すると、壊れる回数が少なくなります。
Session.CodePage = 1252
Response.Write(Property)
Session.CodePage = 65001
実際、このコードはウェブサイトのいたるところで見つかりました。あたかもデータベース ドライバが接続の文字セットをまったく気にしていないかのようです。