从Delphi字符串中检测和检索代码点和代理

前端之家收集整理的这篇文章主要介绍了从Delphi字符串中检测和检索代码点和代理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图更好地理解Delphi中的代理对和Unicode实现.

如果我在Delphi中对Unicode字符串S:=’ĤàVe’调用length(),我会回来,8.

这是因为各个字符[Ĥ],[à],[V]和[e]的长度分别为2,3,2和1.这是因为Ĥ有代理人,有两个额外的代理人,V有代理人,e没有代理人.

如果我想返回字符串中的第二个元素,包括所有代理,我该怎么做?我知道我需要对各个字节进行某种测试.我使用例程运行了一些测试

function GetFirstCodepointSize(const S: UTF8String): Integer;

this SO Question中引用.

但得到了一些不寻常的结果,例如,这里有一些不同代码点的长度和大小.下面是我如何生成这些表的片段.

...
UTFCRUDResultStrings.add('INPUT: '+#9#9+ DATA +#9#9+ 'GetFirstCodePointSize = ' +intToStr(GetFirstCodepointSize(DATA))
+#9#9+ 'Length =' + intToStr(length(DATA)));
...

第一组:这对我来说很有意义,每个代码点大小加倍,但每个都是一个字符,Delphi给我的长度只有1,完美.

INPUT:      ď       GetFirstCodePointSize = 2       Length =1
INPUT:      ơ       GetFirstCodePointSize = 2       Length =1
INPUT:      ǥ       GetFirstCodePointSize = 2       Length =1

第二集:它最初看起来像长度和代码点是相反的?我猜这是因为字符代理被单独处理,因此第一个代码点大小是’H’,即1,但长度返回’H’加’^’的长度.

INPUT:      Ĥ      GetFirstCodePointSize = 1       Length =2
INPUT:      à̲     GetFirstCodePointSize = 1       Length =3
INPUT:      V̂      GetFirstCodePointSize = 1       Length =2
INPUT:      e       GetFirstCodePointSize = 1       Length =1

一些额外的测试……

INPUT:      ¼       GetFirstCodePointSize = 2       Length =1
INPUT:      ₧       GetFirstCodePointSize = 3       Length =1
INPUT:       原文链接:https://www.f2er.com/delphi/101626.html

猜你在找的Delphi相关文章