シフトJIS
Shift_JIS(シフトジス)は、コンピューター上で日本語を含む文字列を表現するために用いられる文字コードの一つ(Wikipedia引用)
「Microsoft コードページ 932(以下 CP932)は、マイクロソフト及び、MS-DOSのOEMベンダがShift_JISを独自に拡張した文字コードである。 ... 」
とあるように、Windowsが扱う文字コードは、シフトJISではなく。MS932です。または、コードページ CP932ともいわれています。
今回行った事
問題のシステムは自社開発したもの。
表示、入力、印刷、ファイル出力共にシフトJIS(CP932)を利用していた。
リリース当時はWindowsXPの全盛期。
利用者は全国の一般ユーザーで、Windows98やMe、2000などを利用している人もいた。
中には、Windows Server を利用する人もいるので、
結局は殆どのOSで動作する必要があった。
さらに、時の流れに合わせて、Windows7、8、8.1、10とOSが新しくなる度に、
システムもアップグレードしていったのだが、
文字コードはそのままだった。
従って、一部の文字が「?」になるなどし、
次第にクレームになっていった。
ということで、今年の10月からUnicode対応させるべくプログラム修正を開始したのが事の始まり。
Unicode対応
開発言語はDelphi2007を利用していたので、DelphiXE2にアップグレード。
というか、念のためにVirtualBOXでバーチャル環境構築し、
そこにDelphiXE2をフルインストール。
ちなみに、Delphi2009からは文字列がUnicodeになったので、
通常であれば、Delphi2007以前のコードを移植するには、
変数宣言の PChar を PAnsiChar へ、String を AnsiString へ、
型キャスト PChar を PAnsiChar へ、String を AnsiString へ置換すればよいのですが、
今回はUnicodeで処理するようにするので、
PChar をPWideCharに、String を WideString に置換。
型キャストも同様にする必要があります。
また、データベースにはSQL Server を利用してたので、
char、varchar、text型のフィールドを
nchar、nvarchar、ntext、または nvarchar(max)型に変更しました。
また、TStringListでファイル入出力していた箇所は、
読み書き時の、TStringList.LoadFromFile / SaveToFile で、
第二引数として、TEncoding.Unicodeを指定するようにしました。
また、FormやReportの保存文字コードをShift_JISにしていたので、
Formをフォームとして表示させ、
SHIFTJIS_CHARSET を DEFUALT_CHARSETに置換しました。
TADOQueryなどのデータベースコンポーネントを利用していたので、
これのフィールド項目の型もStringからWideStringなどに変更しました。
varcharやtext型はバイト数だったのに対して、
nvarcharやntext型は文字数だという点です。
ですから、画面上の入力コンポーネントで40バイトまで入力可能だった場合、
漢字だと20文字までの幅で表示できましたが、
40文字まで入力可能になったことで、倍の表示幅が必要になります。
入力値を印刷するなどしている場合、
印刷時に印字されない文字列が生じるので注意してください。
以上の処置で対応完了です。
CP932で表示できない文字
?、?、?、?、?、?、?、?、?、
‖、〜、?、?、、−、−、?、?、?、、
?、?、?、?、?、?、?、?、?、?、
?、?、?、?、?、?、?、?、?、?、
?、?、?、?、?、?、?、?、?、?、
?、?、?、?、?、?、?、?、?、?、
?、?、?、?、?、?、?、?、?、?、
?、?、?、?、?、?、?、?、?
特に、?と‖が表示できるようになり、
かなり便利になった感があります。
【このカテゴリーの最新記事】
- no image
- no image
- no image
- no image
- no image