Delphi/400バージョンアップに伴う文字コードの違いと制御

Similar documents
Indyを利用したメール送信機能開発

文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 文字コード略歴 Powered by Rabbit 2.0.6

FastReportへの効率的な帳票レイアウトコンバート

FastReportを活用した電子帳票作成テクニック

ミガロ.製品 最新情報

Webサービスを利用して機能UP!

Webコンポーネントのカスタマイズ入門

Delphi/400を使用したWebサービスアプリケーション

Microsoft Word - Word1.doc

Delphi/400を利用したはじめてのWeb開発

SmartPad4iの運用で役立つWEBサーバー機能

Rational Roseモデルの移行 マニュアル

Microsoft Word - VB.doc

(C) Copyright CANVASs Co

グーグル検索マクロの使い方

Delphi/400:帳票開発ノウハウ公開

出力可能なバーコードの種類 出力可能なバーコードの種類各バーコードはそれぞれのバーコードの仕様に準拠します バーコードの種類 PDF417 MICROPDF417 対応バーコードの名称 PDF417 マイクロ PDF417 操作例 PDF417 商品コードの内容を PDF417 にする 作成された

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

データベースアクセス

IME( 日本語入力システム ) の確認 変更方法 / プロパティ確認の手順 ************************************************************************************ ドキュメント目次 IME( 日本語入力システム )

Delphi/400活用! スマートデバイスアプリケーション開発

Windowsテキストファイル操作ノウハウ

目次 第 1 章はじめに 本ソフトの概要... 2 第 2 章インストール編 ソフトの動作環境を確認しましょう ソフトをコンピュータにセットアップしましょう 動作を確認しましょう コンピュータからアンインストー

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます ❶ ❷ ❸ ❶ 入力モード切替操作漢 : 漢字 ひらがな入力モード 1 カナ : カタカナ入力モード英 : 英字入力モード数 : 数字入力モード ❷ 全角 / 半角切替操作全 : 全角入力モード

在宅せりシステム導入マニュアル

ic3_cf_p1-70_1018.indd

目次 1. 変換の対象 砂防指定地 XML 作成メニュー シェープファイルからXMLへ変換 砂防指定地 XMLとシェープファイルの対応.csv 変換処理 CSVファイルによる属性指定... 5

2. Windows Vista から共有フォルダのアクセスについて 対象製品 PNS25, PNB20S, PNS30 (F/W 3.x.x) Window Vista クライアントから 弊社 NAS 製品の共有フォルダにアクセスする際 Vista 側の設定を変更する必要がございます 対処方法は次

マニュアル訂正連絡票

Web & ハイブリッドアプリ開発で役立つIBM i & ブラウザデバッグテクニック

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます ダイヤルボタンの文字割り当てについて (ZP.17-12) ❶ ❷ ❸ ❶ 入力モード切替操作漢 : 漢字 ひらがな入力モード 1 カナ : カタカナ入力モード英 : 英字入力モード数 : 数字入

1.Access Access2007 版てくてく 2007 へのバージョンアップバージョンアップ手順手順について 1-1 Access2007 版てくてく2007について 作業手順の概要について 1 2. てくてく 2007 のインストールインストールについて 2-1 インストールの概

Microsoft Word - JDBC-ODBCu691cu8a3c docx

電話機の取り扱い濁点 半濁点の入力方法 文字の入力方法 文字を入力するには 入力画面で入力モードを選択し ダイヤルボタンを押して文字を入力します 入力モードによって 入力できる文字が異なります 同じ文字を続けて入力する場合は を押してカーソルを右移動してから 2 文字目を入力します 例 : を押すた

JDL Webストレージサービス はじめにお読みください

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

親指シフトキーボード(FMV-KB611)、JISキーボード(FMV-KB621)、FMV-LIFEBOOK(親指シフトキーボードモデル)をお使いになる方へ

中綴じ3・4級.ren

親指シフトキーボード(FMV-KB611)、JISキーボード(FMV-KB621)、FMV-LIFEBOOK(親指シフトキーボードモデル)をお使いになる方へ

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

成功しました と表示されればライセンス認証の更新は完了です プロダクトキーを入力した後にテキストエディタが開き エラーメッセージが表示された場合 WEB ブラウザを起動して指定されたアドレスにアクセスしアカウントでログインします 画面に表示された ライセンスファイル を全てコピーし Originのダ

Taro-82ADAカ.jtd

Microsoft Word - JDBC検証 docx

1. 開発ツールの概要 1.1 OSS の開発ツール本書では OSS( オープンソースソフトウェア ) の開発ツールを使用します 一般に OSS は営利企業ではない特定のグループが開発するソフトウェアで ソースコードが公開されており無償で使用できます OSS は誰でも開発に参加できますが 大規模な

eYACHO 管理者ガイド

インストールマニュアル

ご利用のブラウザのバージョンによっては 若干項目名が異なる場合があります 予めご了承ください Windows をお使いの場合 [ 表示 ] [ エンコード ] [ 日本語 ( 自動選択 )] を選択 [ 表示 ] [ エンコード ] [Unicode(UTF-8)] を選択 Firefox をご利用

Microsoft PowerPoint _VL-CD2xx バージョンアップ手順(汎用版).pptx

Delphi/400最新プログラム文法の活用法

MultiLABELISTOCX と MultiLABELISTV4 MLOCX は MLV4 のレイアウト発行機能を継承しています したがって MLV4 の振分発行やプ リセット発行を使用するための登録情報は使用できません MLV4 のレイアウト管理でレイアウトを作成すると 拡張子が m lay

シンプルスマホ3 ユーザーガイド

以下のソフトウェアに専用ライセンスを設定することで 変換機能が使えるようになります アプリケーション名バージョン日付 JPGIS-XML ビュー F 7.1.0α 以降 2013/06/27 以降 フリーウェア JPGIS-XML ビュー F のバージョン から XML の 筆 と 図郭

管理番号 内容仮想テーブル設定画面およびマッチング条件設定画面においてコメントを設定した場合 変換エラーが発生する マッピング情報設定画面の出力情報に固定値を選択し区分に 動的バイナリ値 を指定した場合 関数を設定す

分析のステップ Step 1: Y( 目的変数 ) に対する値の順序を確認 Step 2: モデルのあてはめ を実行 適切なモデルの指定 Step 3: オプションを指定し オッズ比とその信頼区間を表示 以下 このステップに沿って JMP の操作をご説明します Step 1: Y( 目的変数 ) の

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

RR1soft.book

24th Embarcadero Developer Camp

メール設定 Outlook Express 6 の場合 (Windows 98 ~ XP) Outlook Express 6 の場合 (Windows 98 ~ XP) Windows XP に付属する Outlook Express 6 に αweb のメールアカウントを追加する方法についてご案

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

操作ガイド 用紙タイプ登録ツール

新バージョンDelphi/400 XE7ご紹介 - マルチデバイスデザイナ機能で開発効率アップ! -

プログラミング実習I

9601 F09F 9611 F0A F0B F0BD 9641 F0C F0A F0AA 9622 F0B F0BE 9642 F0C F0A F0AB 9623 F0B F0BF 9643 F0C9

WebOTX V6 J2EEアプリケーションのトラブルシューティング

V-CUBE ミーティング4

ESET Smart Security 7 リリースノート

JC/400でポップアップウィンドウの制御&活用ノウハウ!

Transcription:

宮坂優大 株式会社ミガロ. システム事業部システム 1 課 [Delphi/400] Delphi/400 バージョンアップに伴う文字コードの違いと制御 はじめに Delphi 言語で扱う文字コード 文字コードの違いによる制御ポイント おわりに 略歴 1982 年 11 月 19 日生まれ 2006 年近畿大学理工学部卒業 2006 年 4 月株式会社ミガロ. 入社 2006 年 4 月システム事業部配属 現在の仕事内容主に Delphi/400 を利用したシステムの受託開発と MKS サポートを担当している Delphi および Delphi/400 のスペシャリストを目指して精進する毎日 1. はじめに 2015 年に Windows の大きな変革となる Windows 10 がリリースされたことにより ここ数年で Delphi/400 のアプリケーションも Windows 10 への正式対応を目的にバージョンアップを実施する企業が増えている Delphi はバージョンの互換性が非常に高い言語だが バージョンアップでの大きなポイントの 1 つが文字コードである Windows 9X など旧日本語環境の Windows は Ansi(Shift_JIS) を標準文字コードとして扱ってきたが 最近の Windows では Unicode が標準になっている Delphi 言語も同様に 以前は Ansi が標準文字コードであったが 最近のバージョンでは Unicode に変わっている プログラムには文字を扱うコードが非常に多く その基盤となる文字コードが変わると アプリケーションの動作も影響を受ける可能性が高い そのため バージョン互換が高い Delphi 言語であって も 標準文字コードが異なるバージョン 間でのバージョンアップでは 影響を考 慮した対応が必要となる 本稿では こうした Delphi のバージョ ンアップで重要なポイントとなる文字 コードの扱いについて 違いや制御方法 を考察する 2.Delphi 言語で扱う 文字コード 冒頭で述べたように Delphi のバー ジョンアップで注意すべき重要なポイン トとして 文字コードが挙げられる Delphi が扱う文字コードについて バー ジョンで整理すると Delphi 2007 以前 では Ansi 型 (AnsiString) Delphi 2009 以降では Unicode 型 (UnicodeString) が標準となっている 具体的には Unicode 対応により プ ログラム上の String 型 Char 型 PChar 型の標準仕様が変更されている そのため Delphi 2007 以前のバージョ ンから Delphi 2009 以降のバージョンへ プログラムをバージョンアップする場合には 文字コードへの配慮が必要となる Unicode とは 符号化文字集合や文字符号化方式などを定めた文字コードの規格である Unicode は Ansi と比べると 使える文字種類が非常に多く 世界中で表現されているほぼすべての文字に対応できる たとえば m 3 という記号文字は AnsiString 型には存在しないが UnicodeString 型には存在している これを Delphi アプリケーション上で入力すると Unicode に対応していない Delphi 2007 以前のバージョンでは? で表示されるが Unicode に対応したバージョンでは正しく表示できる 図 1 Unicode について もう少し補足する Unicode の制御文字 文字 記号にはそれぞれに数値が割り当てられており それをコードポイントと呼んでいる たとえば A のコードポイントは 65( バイナリでは 41) B のコードポイントは 66( バイナリでは 42) と それぞれの文字に一意のコードポイントが割り当 62 062_069_migaro_Report_ 宮坂 _ 四.indd 62 17/10/25 14:11

図 1 図 2 63 062_069_migaro_Report_ 宮坂 _ 四.indd 63 17/10/25 14:11

てられている ここで重要なのは UnicodeString 型ではそれぞれの文字が 2 バイトで表現される点である AnsiString 型では半角文字は 1 バイトで表現されるが UnicodeString 型では半角 全角という概念がない この変更のため 文字列のバイト数で計算していたロジックは 図 2 のように Ansi と Unicode で計算や動作が一致しなくなる可能性がある これが大きな影響点といえる ただし標準の文字コードが変わっているだけなので これまで使用していた Ansi 文字列は AnsiString と明示的にコーディングすれば 新しい Delphi 上でも使用できる また同様に 古い Char 型 PChar 型は AnsiChar 型 PAnsiChar 型として使用できる 実際に文字コードの違いで どのような挙動の差異があるかを調べるため 図 3 ソース 1 のプログラムを Delphi 2007 と Delphi 10 Seattle で作成して比較した 画面に TEdit と TButton を配置し ボタンを押すと入力した文字列の 1 4 バイト目を Copy 関数で取得し ShowMessage 関数で表示する ここでは Delphi 2007 のアプリケーションを 1 Delphi10Seattle のアプリケーションを2として比較する 画面項目で あいうえお と入力してボタンを押すと 1のアプリケーションでは あい と表示される 図 4 しかし 2のアプリケーションで同じことを実行しても結果が異なる 同じように あいうえお と入力し ボタンを押すと あいうえ と表示される Delphi 2007 とは異なり 1 4 バイト目ではなく 1 4 文字目を取得していることがわかる 図 5 このように同じプログラムロジックであっても 文字コードの違いによって動作が異なることがある では 2のアプリケーションで 1のアプリケーションと同じように動作させる方法を説明する 単純な方法としては UnicodeString 型を AnsiString 型で扱うことで解消できる Copy 関数に渡す文字列を AnsiString 型で明示的にキャストすることで 従来の AnsiString 型として文字列を扱える ソース 2 修正したソースで再度実行すると 1 のアプリケーションと同じ文字列で表示 されることがわかる 図 6 ただし AnsiString 型でキャストす ると UnicodeString 型では扱える特 殊な文字が扱えなくなるので デメリッ トも理解しておく必要がある IBMi 側の環境が日本語 Unicode を取 り扱う CCSID1399 であれば UnicodeString 型のまま扱ったほうがよ いが 従来の 5026 / 5035 の CCSID で あれば もともと UnicodeString の文 字種類を扱えないので AnsiString で 扱っても問題ない 図 7 Delphi 2007 以前から Delphi 2009 以 降にバージョンアップする際には こう した文字コードの制御を考慮してプログ ラムを変更すれば スムーズに実施でき る 3. 文字コードの違いによる制御ポイント 前章では文字コード自体の違いについ て考察したが 文字コードが変わること で違いが発生する点はほかにもある そ れはプロパティや関数の動作である たとえば TEdit では 入力できる最 大桁数を制御する MaxLength プロパ ティがある これもバイト数単位から文 字数単位でカウントされるため 全角文 字を入力した時にこれまでと挙動が異な る ここでは TEdit で MaxLength プ ロパティを 5 で設定した例を説明する 図 8 この TEdit に対して 123 あい と 入力する Delphi 2007 では 123 あ と入力した段階で規制がかかり 入力で きなくなる 図 9 しかし Delphi 10 Seattle の同じア プリケーションでは 123 あい とす べて文字を入力できるため 挙動が違っ ていることがわかる 図 10 これは Unicode なので 文字数とし てカウントされている これと同じ動作 になるのが 文字長を判断する Length 関数である 123 あいう という文字 列に対して Length 関数で取得できる 結果値は Delphi のバージョンによって 異なる Delphi 2007 ではバイト数で算出され ているため 9 が取得できるが Delphi 10 Seattle では文字数で算出されるた め 6 が取得される 同じ挙動に合わせる対処方法としては 前章で説明したように 対象の文字列を AnsiString 型でキャストすればよい 関数については Delphi 2009 以降でも互換性を考慮し Ansi 専用の関数が別途用意されている場合もある それらの関数は System.AnsiStrings ユニットに定義されている たとえば StringReplace や Upper/ LowerCase StuffString などよく使われる関数が多数含まれている プログラムの Uses 節に System.AnsiStrings を追加すれば これらの Ansi 型関数を使用できる 文字列を扱う関数で動作が違う場合には 互換の Ansi 関数が用意されていることが多いので プログラムを作り変える前に このユニットや WindowsAPI を確認するようお勧めする (WindowsAPI 関数についても Microsoft 社が Ansi 互換の関数を多数用意している ) 4. おわりに 本稿では Delphi のバージョンによって異なる文字コードや制御方法について考察し 対処ポイントをまとめた 文字コード自体は 普段のプログラミングではそれほど意識しないが プログラムコードのほとんどは文字コードが密接に関係している そのため 標準文字コードが変わると アプリケーションの動作にも影響する可能性がある しかし前述の対処例により 文字コードの扱いや互換関数を把握していれば バージョンアップ対応は定型的なソース変更で実施できる Delphi 2007 以前のプログラムから Delphi 2009 以降へバージョンアップをする場合には 本稿の対処ポイントを役立てていただければ幸いである M 64 062_069_migaro_Report_ 宮坂 _ 四.indd 64 17/10/25 14:11

図 3 ソース 1 65 062_069_migaro_Report_ 宮坂 _ 四.indd 65 17/10/25 14:11

図 4 図 5 66 062_069_migaro_Report_ 宮坂 _ 四.indd 66 17/10/25 14:11

ソース 2 図 6 67 062_069_migaro_Report_ 宮坂 _ 四.indd 67 17/10/25 14:11

図 7 図 8 68 062_069_migaro_Report_ 宮坂 _ 四.indd 68 17/10/25 14:11

図 9 図 10 69 062_069_migaro_Report_ 宮坂 _ 四.indd 69 17/10/25 14:11