照合 SQL_Latin1_General_CP1_CI_AS を持つデータベースがあります。そのデータベースには、varchar フィールドがあります。そのデータベースには、文字列 "ó" (コードページ 1252 の単一文字 243) を持つ行があります。コードページを 65001 に設定し、(adodb を使用して) その行を読み取り、ブラウザーに送信する単純な ASP ページがあります。「非ユニコードプログラムの現在の言語」が英語に設定されている場合、すべて正常に機能します。それをロシア語に変更してページを参照すると、「o」が表示されます。サーバー側の ASP ページにブレークポイントを設定できますが、ado が「ó」ではなく「o」を返しているようです。
「非ユニコードプログラムの現在の言語」が重要なのはなぜですか? データベースにはデータがあり、適切なコード ページ用に構成されています。内部的に ADO と VBScript はすべてを Unicode として保存していると思いました。どこかで文字列が「非ユニコードプログラムの現在の言語」で指定されたコードページに変換されているようですが、それでも「?」が表示されると予想されるのであまり意味がありません。「o」の代わりに(ただし、あるコードページから別のコードページへの変換を処理するものと、それが使用する規則はよくわかりません)。
列を nvarchar に変更すると役立つことは理解していますが、これがなぜ起こっているのか説明できません。
(編集) 「ó」が「o」に変換される理由がわかりました。Windows ベスト フィットhttp://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1251.txt
コードページ 1252 文字列を SQL から VBScript に損失なく取得する方法をまだ見つけようとしています。