「お前、まだなやんでいたのか!」と突っ込みの入りそうなWebアプリの文字コード系の話。
ASP.NETのファイルもそこから生成するhtmlもUTF-8でいく決断をしましたが、実はバックエンドのOracle Database 10g R2の文字コード系を何にするのかでなやんでおりました。それというのも、今回のシステムでは最終的に汎用機のラインプリンタでずががががーと印字する事もあり、使える文字の範疇がJIS第一水準と第二水準というお約束があるからです。
ですが、バックエンドのOracle Database 10g R2の文字コード系もDatabase CharactersetにAL32UTF8を設定して、Unicode4.0でいくことを決断いたしました。これで、Vistaからのアクセスでもとりあえずデータベースにまでは正しく格納できるようになります。あとは、Web側のバックエンドのデータベースから基幹システムのデータベースに転送するところで文字コード変換なりをかまそうかと考えています。
これに伴い注意する事は、CHARやVARCHAR2の長さの指定をバイト数単位から文字数単位へと定義をすべて変更しなければいけない点です。なぜならば、SHIFT JISと異なり日本語1文字=2バイトという等式はUTF8では成立しないためです。つまり、表示幅と格納バイト数が等価という前提ははやく頭から追い出さねばなりません。
でも、ずっと以前からVisual BasicもLeft$などの指定はバイト数ではなく文字数だった事を考えれば、Databaseだけ日本語1文字は2バイトなのでーと考えていた方が不自然だったのかもしれません。