【问题标题】:RawByteString type in Free PascalFree Pascal 中的 RawByteString 类型
【发布时间】:2014-09-10 15:00:40
【问题描述】:

Free Pascal docs 声明 RawByteString 类型是在 Free Pascal 中定义的,但我找不到在哪里。人们应该期望它是在System 单元中定义的,就像在 Delphi 中一样,但是当我编译(使用 FPC 2.6.2,{$mode delphi})一个函数声明时

class function FromAnsi(const S: RawByteString): ByteArray; static;

我得到编译器错误

Error: Identifier not found "RawByteString"

我想我可以自己声明类型:

type
  RawByteString = type AnsiString(CP_NONE);

但我想找到“本机”FPC 声明。


感谢您的快速解答。由于我不需要支持 FPC 1.x,我需要的解决方法是:

{$IFDEF FPC}
{$IF FPC_VERSION = 2}
  {$IF FPC_RELEASE <= 6}
    type
      RawByteString = AnsiString;
  {$IFEND}
{$IFEND}
{$ENDIF}

【问题讨论】:

    标签: delphi fpc rawbytestring


    【解决方案1】:

    您需要使用 FPC 2.7.1。

    2.6.x 中不存在新的字符串类型

    【讨论】:

    • 我不知道RawByteString,但UnicodeString至少从2.4.0开始就在FPC中可用,FPC有unicodestringsdelphiunicode模式,还有@987654325 @define,控制/检测string是否映射到AnsiStringUnicodeString
    • @RemyLebeau:对于“新字符串类型”,我指的是动态编码的字符串,而 UnicodeString/WideString/AnsiString 是静态编码的……(尽管有人已经可以考虑 AnsiString 一个新字符串类型,相比 shortstring)
    【解决方案2】:

    来自您在问题中链接的documentation

    直到并包括 FPC 2.6.x,RTL 都是基于 Turbo 的 Pascal 和 Delphi 7。这意味着它主要基于 短字符串、 ansistring 和 pchar 类型。这些类型都没有 编码与它们相关的信息,但隐含地假设 以“默认系统编码”编码并传递给 无需任何转换的 OS API 调用。

    在 Delphi 2009 中,Embarcadero 将整个 RTL 切换到 UnicodeString 类型,使用 UTF-16 表示字符串。 此外,他们还使 AnsiString 类型“可识别代码页”。 这意味着从那时起 AnsiStrings 包含代码页 他们的数据应该根据什么来解释。

    FPC 对这些字符串类型的语言级支持已经 在编译器的当前开发版本中可用(FPC 2.7.1/主干)。 RTL 级别的支持尚未完成。本页概述了这些字符串的代码页相关行为 类型、RTL 中当前的支持级别以及可能的未来 如何改进这种支持。

    换句话说,对于新的 D2009 类似字符串类型,您至少需要 2.7。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多