2012-04-28 55 views
0

我對Delphi很有經驗,但對Unicode有新意。什麼決定了UnicodeString類型的變量是代表Unicode字符串還是ANSI字符串?

嵌入的Delphi XE2文檔有關的UnicodeString(System.UnicodeString)表示:

「的Delphi利用幾個串類型的UnicodeString可以包含Unicode和ANSI字符串

支持這種類型包括以下功能。 :

字符串一樣大的可用內存通過共享引用 內存的使用效率 例程,並根據當前的語言環境評估串 儘管越南運營商。 e,UnicodeString可以表示ANSI字符集字符串和Unicode字符串。 「

我不明白」can「是什麼意思。(」它可以包含Unicode和ANSI。「...」儘管名稱是UnicodeString,但它可以表示ANSI字符集字符串和Unicode字符串「)

我的問題:?。什麼確定類型的UnicodeString的變量表示Unicode字符串或ANSI字符串

回答

3

的文件已經過時UnicodeString在XE2只能包含Unicode數據

在。 CB2009和D2009,當第一次引入UnicodeString時, C++ < - > Delphi交互,其中RTL允許將Ansi數據存儲在UnicodeString中,並將Unicode數據存儲在AnsiString中,以幫助用戶將舊版Ansi代碼遷移到Unicode。 UnicodeStringAnsiString確實具有統一的內部結構,並且Delphi編譯器有一個{$STRINGCHECKS}指令,可以檢測到任何差異並在需要時執行無提示數據轉換。雖然它確實有效,但如果你不小心,它也會產生微妙的副作用。在XE發佈的時候,Embarcadero認爲用戶有足夠的時間進行遷移,所以{$STRINGCHECKS}指令和支持RTL功能已被刪除。 UnicodeStringAnsiString仍然有一個統一的內部結構,所以它在技術上是可能的UnicodeString和Unicode存儲在一個AnsiString安思數據,但你必須直接操縱內存做手工,編譯器/ RTL不會做它「正常」代碼,並且在差異存在時不再執行靜默轉換,因此如果不小心可能會發生數據損壞和/或崩潰。

相關問題