Free Pascal docs表示在{$ 1}}类型是在Free Pascal中定义但我找不到位置。人们应该期望它在RawByteString
单元中定义,就像在Delphi中一样,但是当我编译(使用FPC 2.6.2,{$ mode delphi})函数声明
System
我收到编译错误
class function FromAnsi(const S: RawByteString): ByteArray; static;
猜猜我可以自己申报这个类型:
Error: Identifier not found "RawByteString"
但我想找到" native" FPC声明。
感谢您的快速解答。由于我不需要支持FPC 1.x,我需要的解决方法是:
type
RawByteString = type AnsiString(CP_NONE);
答案 0 :(得分:5)
您需要使用FPC 2.7.1。
2.6.x中不存在新的字符串类型
答案 1 :(得分:2)
来自您在问题中链接的documentation:
直到并包括FPC 2.6.x,RTL基于Turbo Pascal和Delphi 7.这意味着它主要基于 shortstring,ansistring和pchar类型。这些类型都没有 编码与它们相关的信息,但是被隐含地假设 在"默认系统编码中编码"并被传递给 OS API调用没有任何转换。
在Delphi 2009中,Embarcadero将整个RTL切换到了 UnicodeString类型,表示使用UTF-16的字符串。 此外,他们还制作了AnsiString类型"代码页感知"。 这意味着从那时起AnsiStrings包含代码页 据此,他们的数据应该被解释。
FPC对这些字符串类型的语言级支持已经存在 在当前开发版本的编译器中可用(FPC 2.7.1 /躯干)。 RTL级别支持尚未完成。此页面概述了这些字符串的代码页相关行为 类型,RTL中当前的支持级别以及可能的未来 如何改善这种支持的方式。
换句话说,对于新的D2009类似的字符串类型,您至少需要2.7。