[?]字符代码 - 操作方法:使用复制命令;

时间:2017-07-29 23:49:12

标签: function unicode character-encoding logic lazarus

PROCEDURE TForm1.Button1Click(Sender: TObject);
VAR count:Integer; 
    text1:String;
BEGIN
  text1 := 'Line1'+#13#10+'® Line2'+#13#10+'Line3';

  FOR count := 1 TO Length(text1) DO
  ShowMessage(Copy(text1,count,4));
END;

所以...... unicode 文字的字符代码大约有4个数字;
因为可用性很不在乎它是如何工作的, 意味着变得复杂,as it is的事情变得更加简单;

然后从没有关于所有这些东西的文档,
将是知道如何仅为字符串中的第一个标识复制字符代码; 使用copy命令仅获取未引用为#的{​​{1}};

string 'string';代码'Line1';

然后这是关于::
的问题 [?] 如何使用复制命令,其中 unicode 的详尽支持, [?] 从示例中它可以完美地显示带有#13#10等符号的消息,从而获得其字符代码?
执行复制(text1,1,1)以从每个代码返回第一个® [?] 含义;

编辑:是的...函数长度计算加法字符;

EDIT2:使用#时遇到'|'+copy(text1,1,1)+'|'那是什么意思,它会返回完全空白的消息?

  

这将创建一个函数来避免返回RTL ®   来自某些ASCII限制;
其他人不支持   像Copy;

这样的功能

1 个答案:

答案 0 :(得分:0)

Lazarus默认使用UTF-8编码,因此字节长度(以字节为单位)可以变化(我知道从ASCII字符的1个字节到某些特殊字符的4个字节)。

示例:

program project1;

{$mode objfpc}{$H+}

uses
    LazUnicode, LazUTF8;

var
    //           12345678901234
    s: string = 'Παράδειγμα 123';
    c: string;

begin
    Writeln(Length(s));     // 24, length in bytes (10 2-bytes chars + 4 ASCII chars)
    Writeln(UTF8Length(s)); // 14, length in chars (code poits)

    // To enumerate characters in string, LazUnicode unit should be in "uses" clause
    // "c" variable declared as "string" because it can hold more then one bytes
    for c in s do
        Writeln(c);

    // Copy code point(s) (not byte(s))
    Writeln(UTF8Copy(s,1,1));
end.

更多阅读:Unicode Support in Lazarus