Free Pascal 3.2.0 中的 Unicode 编码/解码错误

Unicode encoding / decoding error in Free Pascal 3.2.0

此测试通过 Free Pascal 3.0.4。 (源文件编码为UTF8,OS为Windows10 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。