這個單元測試用的Free Pascal 3.0成功運行在Delphi模式:何時安全地將UnicodeString強制轉換爲Free Pascal 3字符串?
procedure TFreePascalTests.TestUTF8Decode;
var
Raw: RawByteString;
Actual: string;
begin
Raw := UTF8Encode('關於漢語');
Actual := string(UTF8Decode(Raw)); // <--- cast from UnicodeString
CheckEquals('關於漢語', Actual);
// check Windows ANSI code page
CheckEquals(1252, GetACP);
// check Free Pascal value (determines how CP_ACP is interpreted)
CheckEquals(65001, DefaultSystemCodePage);
end;
UTF8Decode返回的UnicodeString。如果沒有硬盤類型轉換爲字符串時,編譯器發出警告不安全的轉換:
警告:隱式字符串類型轉換與潛在的數據丟失,從 「的UnicodeString」到「AnsiString類型」
(與測試Lazarus 1.6/FPCUnit GUITestrunner)
根據http://wiki.freepascal.org/Character_and_string_types#String,字符串類型默認爲AnsiString(如果{$ H +}開關設置爲使用AnsiString而不是ShortString)。
它看起來像Free Pascal將Unicode字符串存儲在AnsiString變量中。 (即使沒有演員表,測試成功)
問題:隨着測試成功,我可以假設使用演員陣容(壓制警告)是安全的,而不會冒數據丟失的風險嗎?
'此單元測試運行成功' - 什麼是您的操作系統默認語言? – GSerg
@GSerg操作系統使用英語作爲默認語言 – mjn