Windowsの英語版環境でASP.NETのサイト作成をする際の日本語に関する注意事項

Windows 2000でしかまだ試していないので2003やXPだと少し話しは違うかもしれないけど、きっと似たような話だと思う。
最近、ASP.NETを使った日本語Webアプリケーションを英語環境へ移す作業をやっていて、色々と気づいた点や再確認したことをメモ。

web.configというファイルの設定で、globalization要素の一つにfileEncodingというのがあるのだが、SDKの記述には、fileEncodingを指定しないときはどういう動作なのかははっきりと書いていない。Shift_JISで作成されたaspxファイルでfileEncodingを指定しないと、システムロケールを日本語にしても初期動作としてはANSI(iso-8859-1?)ファイルとして読み込んでしまうみたい。ところが同じ環境で、一度、fileEncodingをshift-jisで指定して、きちんと動作させた後、fileEncodingの指定を削除してしまうとどこかに記憶されているのだろうか、なぜかちゃんと動作する。この動きはいまいちよくわからない。

ところで、システムロケールについては、マイクロソフト のGlobal DevサイトのFAQ には、

The system locale (sometimes referred to as the system default locale), determines which ANSI, OEM and MAC codepages and associated bitmap font files are used as defaults for the system. These codepages and fonts enable non-Unicode applications to run as they would on a system localized to the language of the system locale.

とあり、さらに、同じサイトのConfigurable Language and Cultural Settingsには、

The system locale is not really a locale. It determines which codepages (ANSI, DOS, and Macintosh) are used on the system by efault. Changing the system locale also installs the necessary bitmap font files to support legacy applications in the language you selected.

とあり、「システムロケールは、実はロケールというよりは、デフォルトコードページ」ときっぱり書いてある。これが一番わかりやすくて正しそう。

ちなみに日本語版環境では、

   requestEncoding="shift-jis"
   responseEncoding="shift-jis"

だけでも大体問題なく動作するのは、システムロケールもデフォルトユーザロケールも全部日本語の設定になっているからなのだろう。

それから、Windows 2000では、Default Userロケールがコントロールパネルからは変更できなかったので、レジストリ設定で、いじらないといかんと思い下記のレジストリを再確認。

   HKEY_USERS/.Default/Control Panel/International

しかし、これはあくまでもユーザロケールであるので、文字化けとはあまり関係ない場合が多い。英語でインストールしたWindows 2000でコンソールでログオンしているユーザが自分のユーザロケール(数字や日付の表示形式を含む部分)をドイツ語とかに変更してしまうと、デフォルトユーザで実行されるサービス等では英語のロケールが引き続き使用されてしまうため、日付の出力形式がそのユーザのUIに表示されるものとレポートやログに出力されるものが異なってしまい、不都合が生じるようなシナリオでのみ注意が必要。
あと、新規に作成されるユーザもデフォルトユーザのもので作成されてしまうので、それがまずい場合は少し注意がいる。

ということで、大抵の場合はDefault Userのロケールは0x409(英語)のままでもシステムロケールをJapaneseにして、さらに下記の設定をしてやれば、一応日本語での問題はほぼなくなる様子。システムロケールをJapaneseにしておいてやるのは、非Unicodeプログラムや非Unicodeでないコード、例えばShift_JIS等で作成されたファイルの入出力を行っているプログラムで明確にコードを意識せずライブラリ等を単純に使用していて、システムのデフォルトが無意識に使用されているようなプログラムを実行する際にシステムロケールが英語のままだとコード変換が正常に行われず文字化けが生じる可能性があるためである。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <system.web>
      <globalization
         fileEncoding="shift-jis"
         requestEncoding="shift-jis"
         responseEncoding="shift-jis"
         culture="ja-JP"
         uiCulture="ja-JP"
      />
   </system.web>
</configuration>
This entry was posted in Uncategorized and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *