string - 最新的 Delphi 编译器版本和字符串类型兼容性

标签 string delphi unicode utf-8 compatibility

我正在尝试使一些字符串处理例程与
最新的德尔福版本。我正在使用 Delphi2005 和 2007,但我不完全确定兼容性。

这里有一些示例,它们是否与旧字符串类型和新字符串类型兼容?
(我将使用一个虚构的 STRING_UNICODE 指令)。

  • 类型定义:
    {$IFNDEF UNICODE_STRING}  
    TextBuffer = Array[0..13] Of Char;   
    {$ELSE}  
    TextBuffer = Array[0..13] Of WideChar;  
    {$ENDIF}
    

    没用还是没用? Char 类型(变成原来的)是 Unicode 字符串之前的 WideChar,还是还有区别?
  • 一个功能:
    Function RemoveBlanks(Text: String): String;  
    Var   
      i: integer;  
    Begin  
      result := '';  
      For i:= 0 To Length(Text) Do  
      Begin  
        {$IFNDEF UNICODE_STRING}   
        If Byte(Text[i]) < 21 Then Continue;   
        {$ELSE}  
        If Word(Text[i]) < 21 Then Continue;  
        {$ENDIF}  
        If Text[i] = ' ' Then Continue;    
        Result := Result + Text[i];  
      End;
    

    Word() 转换是否正常?

    这里还有' '问题。空间如何处理
    在 Unicode 版本中?我是否也应该使用该指令来
    区分 ' '' '或将' '被自动处理
    作为 2 字节的空白?
  • 跳线:
    NewLineBegin := CanReadText( aPTextBuffer, #13#10 );
    

    第二个参数 (#13#10) 在 Unicode 版本中是如何解释的?它兼容吗?会不会被翻译成字节 block 00130010 ?如果不是,那么该指令是否应该与常量 #0013#0010 一起使用?
  • 最佳答案

    首先要做的是阅读 Marco Cantú 的论文
    统一码:http://edn.embarcadero.com/article/38980

    问题 1

    只需一直使用 Char 而不使用条件代码,它就可以在新旧版本中使用。

    Char 是一种特殊类型,在旧版本的 Delphi 中是 8 位类型,在新的 Unicode 版本中是 16 位类型。

    问题2

    Char 是一个序数类型,所以你可以写 if s[i]<#21 .

    对于字符串,您还需要从 1 开始循环,因为它们使用基于 1 的索引。

    问题 3

    不需要写#0013,#13 就可以了。

    简而言之,几乎所有编写良好的代码都不需要更改。

    关于string - 最新的 Delphi 编译器版本和字符串类型兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5736792/

    相关文章:

    delphi - TIEHTTP 组件不适用于 IE9

    delphi - 为什么在我的程序开始之前 GetLastError 出现错误?

    unicode - UTF-8、UTF-16 和 UTF-32 可以存储的字符数是否不同?

    java - 我如何调用 Intent 并将其放入我的 vector 中?

    android - AsyncTask : DoInBackground(String. ..) 与 DoInBackground(Params...) 冲突?

    python - 字符串到 python 中的数组 (boto3)

    c++ - 将 char* 转换为 Unicode std::string

    java - 如何用空格字符将一个字符串拆分为另一个字符串?

    c# - 如何使用 Delphi 2007 中的非 IIS 托管、WCF、C# Web 服务?

    vim - vim中的版权字符