Delphi 2009 ユニコード対応ですが、ここによくまとまった解説があります。
非常に判りやすいですね。時期的に見て Field Tester の方なのかな?
#Hideaki Tominagaさんという方の Web ページです。
「DEKOのざつだん」
http://homepage1.nifty.com/ht_deko/ft0809.html
で、これによると、Delphi 2009 の文字処理ライブラリは基本的には
サロゲートペアに対応していないみたいです。
この問題を補うライブラリとして紹介されている文字列処理ライブラリ「MECSUtils」は
なかなか使えそうです。
ただ、ざっと読んだ限りでは「結合文字」には対応していなさそうですね...
蛇足:
翔泳社より Delphi 2009 の出荷が遅れているとの連絡がありました。
届くのは来週末になりそうです(^_^:
----------
東京都 日野市 中村拓男
> #Hideaki Tominagaさんという方の Web ページです。
そうですね(^^;A
> ただ、ざっと読んだ限りでは「結合文字」には対応していなさそうですね...
結合文字列に関してはサポートされていません。
理由ですが、.NET 2.0にある"StringInfo.LengthInTextElements"
http://msdn.microsoft.com/ja-jp/library/system.globalization.stringinfo.lengthintextelements(VS.80).aspx
に相当するAPIが存在しない(見つけられていない)のです。
それと、"か + ゛" で "が" になるような文字は
"Combining Character Sequence"と呼ばれており、"結合文字の列"となっています。
結合文字自体はコードポイントを持った文字ですが、
それらが連なったものは厳密には文字ではなく"文字列"扱いのようです。
# 言葉遊びも大概にしてほしいものです(--メ)
現状、結合文字列は正規化を用いてどうにか処理するしかないのかも知れませんね。
MECSUtilsに於いて正規化関数は
- MecsNormalize
- MecsIsNormalized
という2つの関数が用意されています(XP以降でしか動作しません)。
もう少し、Unicodeコンソシアムの資料とMSDNをあたってみます。
追伸:
中村さんの先日の投稿、"Delphi 2009 体験版を使ってみて"にある
AnsiStringの内部構造の補足を書いてみました。
http://homepage1.nifty.com/ht_deko/tech018.html
# 間違いがありましたらご指摘下さいm(_ _)m
--
by DEKO
-------------------------------------
http://homepage1.nifty.com/ht_deko/
ht_...@nifty.com
-------------------------------------
こんにちは DEKO さん(でいいのかな?)
>> ただ、ざっと読んだ限りでは「結合文字」には対応していなさそうですね...
>結合文字列に関してはサポートされていません。
>
>理由ですが、.NET 2.0にある"StringInfo.LengthInTextElements"
>http://msdn.microsoft.com/ja-jp/library/system.globalization.stringinfo.lengthintextelements(VS.80).aspx
>に相当するAPIが存在しない(見つけられていない)のです。
>
>それと、"か + ゛" で "が" になるような文字は
>"Combining Character Sequence"と呼ばれており、"結合文字の列"となっています。
>結合文字自体はコードポイントを持った文字ですが、
>それらが連なったものは厳密には文字ではなく"文字列"扱いのようです。
>
># 言葉遊びも大概にしてほしいものです(--メ)
>
>現状、結合文字列は正規化を用いてどうにか処理するしかないのかも知れませんね。
>
>MECSUtilsに於いて正規化関数は
>- MecsNormalize
>- MecsIsNormalized
>という2つの関数が用意されています(XP以降でしか動作しません)。
情報ありがとうございます。
1word = 1文字 の世界からそろそろ離れなければいけないと思いつつ
放置しておりましたが、世の中 Vista 以降、サロゲートペアや、結合文字への
対応が本格化しているみたいですね。
Uniscribe とか、いろいろと調べてはいるのですが、まだまだ勉強不足のようです。
>中村さんの先日の投稿、"Delphi 2009 体験版を使ってみて"にある
>AnsiStringの内部構造の補足を書いてみました。
>http://homepage1.nifty.com/ht_deko/tech018.html
>
># 間違いがありましたらご指摘下さいm(_ _)m
>
一点、AnsiString、UnicodeString, RawByteString・・・や WideString は 全て
長さ付き、かつNULLターミネートだと思います。
体験版ののヘルプでは
「RAD Studio での Unicode」
ms-help://embarcadero.rs2009/devcommon/unicodeinide_xml.html
と
「内部データ形式」
ms-help://embarcadero.rs2009/devcommon/internaldataformats_xml.html
に不完全ですが NULL ターミネートの記述があります。
#「内部データ形式」では AnsiStringの記述が古いままですが...
----------
東京都 日野市 中村拓男
> 一点、AnsiString、UnicodeString, RawByteString・・・や WideString は 全て
> 長さ付き、かつNULLターミネートだと思います。
おっと...実際に調べましたがそのようです。
ご指摘ありがとうございましたm(_ _)m
# 件の資料も修正しておきました。
ht_...@nifty.com さんは書きました:
>こんにちは。
>
>> 一点、AnsiString、UnicodeString, RawByteString・・・や WideString は 全て
>> 長さ付き、かつNULLターミネートだと思います。
>
>おっと...実際に調べましたがそのようです。
>ご指摘ありがとうございましたm(_ _)m
>
># 件の資料も修正しておきました。
もう一点ありました(^^;
要素サイズは Word です。体験番で試験しましたので間違いないと思います。
----------
東京都 日野市 中村拓男
> もう一点ありました(^^;
> 要素サイズは Word です。体験番で試験しましたので間違いないと思います。
あう。その通りです。
こちらも修正をしておきました。
重ね重ね、ご指摘ありがとうございます。