2012-02-07 148 views
4

我需要使用delphi 7將字符串從utf8轉換爲寬字符串。有誰能告訴我爲什麼下面的代碼在delphi 7中不起作用嗎? Utf8Decode函數的參數只是一個示例。utf8decode in delphi 7

var ws: WideString; 
begin 
    ws := Utf8Decode('[أمبير] خطأ تيار- تيار Ů…ŘŞŮاصل Ů…Ř·Ů„Ů‚'); 
end; 

在德爾福7它給了我很多問號,但在bds2006它運作良好。

我是否需要切換一些編譯器指令,或者如何在delphi 7中將utf8String轉換爲Widestring?

SOLUTION

有沒有錯Utf8Decode功能,德爾福代碼智能工具提示表達式求值輸出誤導了我,它無法顯示Widestrings。見下圖:

Tooltip expression evaluation

但MessageBoxW可以顯示文本:

enter image description here

+0

你想要做的第一件事是什麼?你如何顯示WideString輸出?你真的需要UTF-8,WideString已經是Unicode嗎?我很高興在這裏有更多的細節。 – 2012-02-07 16:03:28

+0

@JensMühlenhoffutf-8將來自xml文件,我想將它傳遞給需要寬字符串的另一個庫函數。我使用調試器中的手錶來檢查值 – balazs 2012-02-07 16:19:47

+0

我知道這並不總是一個選項,但對於Unicode支持,考慮升級到最新版本的Delphi是非常值得的,因爲Unicode支持最終才起作用。 – 2012-02-12 15:27:58

回答

5

我認爲,問題是,德爾福7只能使用ANSI源文件。 Delphi的後續版本將使用UTF-8作爲源文件,事實上,您可以指定您希望用於源文件的編碼。

如果您將UTF-8編碼的字符串解釋爲ANSI(例如使用Notepad ++),則可以在ANSI源代碼文件中嵌入UTF-8編碼的文字。例如該代碼會產生在用Delphi 6

ws := UTF8Decode('[ŘÅمبير] خط؊تيار- تيار Ů…ŘŞŮاصل Ů…Ř·Ů„Ů‚'); 
MessageBoxW(0, PWideChar(ws), 
    PWideChar(WideString(FloatToStr(CompilerVersion))), 0); 

enter image description here

試圖把你的字符串字面這樣是不實際與文本的消息框。您可能需要開始將它們放入資源中。

+1

我認爲Delphi 7可以處理UTF-8編碼文件。 .pas文件是Utf-8編碼,沒有BOM(用記事本++檢查),它在Delphi IDE中正確顯示。我將你的MessageBoxW部件粘貼到我的delphi 7代碼中,並且它顯示了正確的文本,看起來像Code insight不能顯示橫幅... – balazs 2012-02-07 16:42:07

+0

我不以這種方式存儲utf-8字符串,我只是想給一個簡單的例子..最後它證明了守則洞察誤導了我。 utf8decode函數完美工作。謝謝。 – balazs 2012-02-07 16:53:07

+2

好的,但我仍然認爲這是你問的問題的答案。 – 2012-02-07 16:55:28