2012-04-28 32 views
0

私はDelphiで経験はありますが、Unicodeは初めてです。UnicodeString型の変数がUnicode文字列かANSI文字列かを判別するにはどうすればよいですか?

のUnicodeString(System.UnicodeString)について組み込みのDelphi XE2のドキュメントは言う:

を「デルファイは、いくつかの文字列型を利用UnicodeStringには、UnicodeとANSIの両方の文字列を含むことができ、このタイプの

サポートは、以下の機能が含まれています。 :

使用可能なメモリと同じ大きさの文字列参照の共有を介して、メモリの効率的な使用 現在のロケールに基づいて文字列を評価 ルーチンと演算子 その南にもかかわらず。。。 UnicodeStringは、ANSI文字セット文字列とUnicode文字列の両方を表すことができます。 "

" can "という単語の意味を理解できません(" UnicodeとANSIの両方を含むことができます) "" UnicodeStringは名前にかかわらず、ANSI文字セット文字列とUnicode文字列の両方を表すことができます。 ")

私の質問:?。。タイプのUnicodeStringの変数はUnicode文字列またはANSI文字列を表すかどうかを判定し

答えて

3

ドキュメントが古くなっているものをXE2でUnicodeStringは、Unicodeデータだけを含めることができます

でCB2009とD2009は、UnicodeStringが初めて導入されたとき、 + + Delphiインタラクションでは、AnsiデータをUnicodeStringに格納し、UnicodeデータをAnsiStringに格納することで、従来のAnsiコードをUnicodeに移行することができます。 UnicodeStringおよびAnsiStringは統一された内部構造を持ち、Delphiコンパイラは{$STRINGCHECKS}ディレクティブを持っていて、矛盾を検出し、必要に応じてサイレントデータ変換を実行します。それは動作しましたが、あなたがそれに注意を払わなければ微妙な副作用もありました。

XEがリリースされるまでに、Embarcaderoはユーザーの移行に十分な時間があると考えていたため、{$STRINGCHECKS}ディレクティブとサポートするRTL機能が削除されました。 UnicodeStringAnsiStringはまだ一貫した内部構造を持っているので、AnsiデータはUnicodeStringとUnicodeをAnsiStringに格納することは技術的に可能ですが、手動で行うには直接メモリを操作する必要があります。不一致が存在する場合はサイレントコンバージョンを実行しないため、注意しないとデータの破損やクラッシュが発生する可能性があります。

関連する問題