2014-01-07 33 views
0

關於Unicode的很多信息,但很難得出結論。在Delphi XE中處理UTF-16字符串數據類型(最佳做法)

我正在研究一個多語言的Delphi XE5應用程序,現在我用這個unicode字符來面對這個問題。老實說,我不想了解背後的魔力,我只是想看看他們在我的應用程序中工作。

之前很簡單。一般使用String數據類型。現在,我讀過有關WideStringUnicodeStringAnsiString而事實上,在String是XE5符合UTF-16

我已經WideString測試樣(şţăîâ)的lating字符工作,但它仍然是不明確如果WideString是最好的一個。我應該使用UnicodeString還是其他?

那麼,如果我應該製作支持所有語言的多語言應用程序,那麼最終應該使用什麼樣的數據類型?是否有可能保留String類型並得到相同的結果,如WideString

備註:我在我的應用程序裏面使用了FireDac組件,但這應該不重要。

+5

你應該只使用'string'。 –

+2

[TField.AsString返回一個AnsiString編碼值(即使聲明爲字符串)](http://stackoverflow.com/q/9459186/458259)和TField.AsWideString返回一個字符串= UnicodeString!這可能是您混淆的根源。見http://blog.synopse.info/post/2013/04/22/TDataSet...-now-I-m-confused :) –

回答

2

在現代德爾福「字符串」是一個「UnicodeString」真正的數據類型的快捷方式。除非必須強制使用其他類型,否則請使用它。

WideString是德爾福的微軟OLE BSTR類型的筆名,缺少引用計數。這會禁用寫時複製優化,並使這些字符串的工作速度比UnicodeString慢(一般而言,數據緩衝區會一次又一次地被複制,而不僅僅是傳遞新的指針)。除非你需要這些功能 - 更好地使用通常的字符串。但是,對於國際化來說,這兩種類型的工作都足夠了

+0

那麼爲什麼字符串不工作,以顯示unicode和寬帶工作?我應該設置一些東西給我的應用程序? – REALSOFO

+0

顯示代碼,儘可能短的示例(Google sscce)在輸入上具有正確的字符,但在輸出上顯示破碎的字符。一般來說,它只是起作用。可能你會使用一些過時的庫而不理解它。你用XE還是XE5?解決你的問題,只表示正確的版本pleade –

+2

Btw你確定你只改變了數據類型,沒有改變使用的函數,如調用'。 AsWideString'和'.AsString'是不同的函數,但它們不是變量/數據類型? –

相關問題