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。
此测试通过 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。