2010-12-17 34 views
2

情況:我有一個使用UTF-8作爲內部字符串格式的外部DLL。接口函數都使用PAnsiChar來傳遞字符串。德爾福2010年:如何將UTF8編碼的PAnsiChar轉換爲UnicodeString?

我的應用程序的其餘部分使用Delphi的原生string類型;因爲我正在與德爾福2010年,這將映射到UnicodeString

如何可靠地將這些PAnsiChar參數(指向UTF-8編碼的字符串)轉換爲UnicodeString?

我有這個功能,我認爲工作得很好:

function PUTF8CharToString(Text: PAnsiChar): string; 
var 
    UText: UTF8String; 
begin 
    UText := UTF8String(Text); 
    Result := string(UText); 
end; 

...但現在我已經運行到哪裏,結果字符串被損壞的情況下;當我將PAnsiChar保存到文件中時,沒問題;但是當我使用上面的函數轉換後保存結果字符串時,它已損壞。

應該這工作正常,並且這是否表示其他一些內存(de)分配問題?


編輯:我終於成功地通過轉換後的字符串賦值給一個局部變量的字符串,而不是直接將其傳遞給另一個函數擺脫了內存損壞。

回答

3

從系統:

功能UTF8ToUnicodeString(常數S:PAnsiChar):的UnicodeString;超載;


UnicodeStr:= System.Utf8ToUnicodeString(Text);

+0

咄...我不明白爲什麼我沒有找到。我仍然得到一些內存損壞,但在另一個位置。也許我的對立功能(StringToPUTF8Char)也不能正常工作;但我找不到一個UnicodeStringToUTF8函數...謝謝,無論如何,艾倫! – Martijn 2010-12-19 11:47:34

0

使用的SetString嘗試(),而不是鑄造:

function PUTF8CharToString(Text: PAnsiChar): string; 
var 
    UText: UTF8String; 
begin 
    SetString(UText, Text, StrLen(Text)); 
    Result := UText; 
end;