问题描述
该测试在Free Pascal 3.0.4中通过。 (源文件编码为UTF8,操作系统为Windows 10 64位)
{$MODE DELPHI}
...
var
Raw: RawByteString;
Actual: string;
begin
Raw := UTF8Encode('关于汉语');
Actual := string (UTF8Decode(Raw));
CheckEquals('关于汉语',Actual);
end
在Free Pascal 3.2.0中,它失败了:
expected: <关于汉语> but was: <å³äºæ±è¯>
RawByteString在system.h中声明为AnsiString(CP_NONE)类型
解决方法
如果我将字符转换(或声明)为 UnicodeString,则转换有效。以下测试在 Free Pascal 3.2.0 上成功:
procedure TFreePascalTests.TestUTF8Encode;
const
THE_CHARACTERS: UnicodeString = '关于汉语';
var
Raw: UTF8String;
Actual: UnicodeString;
begin
Raw := UTF8Encode(THE_CHARACTERS);
Actual := UTF8Decode(Raw);
CheckEquals(THE_CHARACTERS,Actual);
end;
Raw 变量可以定义为 RawByteString 或 Utf8String。