喫茶XRAYトップページ

[スレッド全体
]

[1428] Re:ユニコードと私返信 削除
2007/11/2 (金) 11:31:45 TS
Delphiがユニコード対応になったらバージョンアップ
したいと思ってますがユニコードについて余り分かってません。
そこでSyakeさん教えて下さい。
> ユニコードになるとこれは完全に無理ですよね。
ユニコードは 等幅フォントとかLength関数がどういう扱いに
なって例示の扱いができなくなるのでしょうか。

[1429] Re2:ユニコードと私返信 削除
2007/11/2 (金) 13:34:38 honadaiku
マルチバイト文字列 (string型) では、等幅フォントなら、1バイト文字は半角
に、2バイト文字は全角になるので、印字幅の計算が簡単 (Length の値を揃える
と幅も揃うので表組みしやすい)。
しかし、ユニコード (WideString型) では、Length の値は文字数であり、印字
幅とは無関係なので計算が面倒 (頭から一文字づつ順番に幅を調べて全部足して
みないと印字位置・幅が決められない)。
というようなことではないでしょうか。

参考 (Delphi のヘルプから引用)
『1 バイトおよびマルチバイト文字列の場合,Length は文字列によって使用さ
れるバイト数を返します。Unicode (WideString) 文字列の場合は,Length はバ
イト数を 2 で割った値を返します。』

[1430] Re3:ユニコードと私返信 削除
2007/11/2 (金) 18:35:28 Syake
▼ honadaikuさん
> マルチバイト文字列 (string型) では、等幅フォントなら、1バイト文字は半角
> に、2バイト文字は全角になるので、印字幅の計算が簡単 (Length の値を揃える
> と幅も揃うので表組みしやすい)。
> しかし、ユニコード (WideString型) では、Length の値は文字数であり、印字
> 幅とは無関係なので計算が面倒 (頭から一文字づつ順番に幅を調べて全部足して
> みないと印字位置・幅が決められない)。
> というようなことではないでしょうか。


そう言うことですね。


[1431] Re2:ユニコードと私返信 削除
2007/11/2 (金) 18:43:35 Syake
▼ TSさん
> なって例示の扱いができなくなるのでしょうか。

Non Unicode
Length('貴方は123') = 9
Unicode
Length('貴方は123') = 6
です。


[1432] Re3:ユニコードと私返信 削除
2007/11/2 (金) 21:17:56 TS
honadaikuさん、Syakeさん
説明ありがとうございます。

実際どの程度コードを変更しないといけないか分かりませんが、
作業の手間は増えても早くユニコード対応にして欲しいです。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82