QLOOK ANALYTICS
infinity - Totonicapan.NET Revision 8 -

Delphi 2009 特集 更新(2009.06.22)

totonica | 2009.06.22 Monday 11:45:51

UnicodeStringとAnsiString

一番最初の記事を更新しました。
UTF8String絡みのことです。

最近Delphi 2009絡みの質問も多くなりましたが、
ところどころで根本的なことが分かっていない発言が散見されます。
躓いている人の多くがAnsiString、UTF8String、RawByteStringという単語を並べていますが、
そもそもDelphi 2009での文字処理の基本はUnicodeStringを使うことです。

文字処理の流れを可視化すると以下のようになります。

○Step.1
テキストファイル、DB、メール等のデータ(様々なエンコーディングで記録されている)を読み込み、
これをUTF-16LE(UnicodeString)に変換する。

○Step.2
UnicodeStringを用いて各種文字列操作を行う
(アプリケーション内部での処理)

○Step.3
UTF-16LEのデータから任意のエンコーディングに変換して、
テキストファイル、DB、メール等のデータに書き出す。
この際のエンコーディングはアプリケーションユーザーが指定したものでOKなので、なんでも良いことになる。
(仮に欠損が生じたとしてもそれはユーザーの選択である)

以上を見てもらえれば分かるように、
UTF-16LE以外のエンコーディングはファイル等の入出力以外では出てきません。
内部処理をすべてUTF-16LEにすることで、GUIを通してもAPIを通してもRTLを使ってもパフォーマンスは落ちません。
(無変換なので)
また、EAWを算出する際にUnicodeコードポイントを求める事になりますが、
この場合の変換オーバーヘッドはUTF-8より圧倒的に少ないです。
つまりUnicode=UTF-16LEですべてを処理することで、変換の回数を最小限にできるので、パフォーマンスの劣化を防げます。
また、不用意な変換がないので、文字化けや欠損などを防ぐことが出来ます。

Delphi 2009の文字列処理で躓いている人は、
まず一連の処理の流れを確認してみて下さい。
内部処理を全てUnicodeStringで統一してしまえば、
あとはUnicode特有の問題をどうするか?というより高度なレベルに至るはずです。

トップに戻る

Comments

Comment Form









Trackback URL

http://totonica.s41.xrea.com/blog/sb.cgi/1107

Trackbacks

トップに戻る

Special Links

Selected Entries

Categories

Archives

Recent Comments

Recent Trackbacks

Others