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

问题描述

该测试在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。