加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:22:14 所属栏目:大数据 来源:网络整理
导读:我试图更好地理解Delphi中的代理对和Unicode实现. 如果我在Delphi中对Unicode字符串S:=’?àVe’调用length(),我会回来,8. 这是因为各个字符[?],[à],[V]和[e]的长度分别为2,3,2和1.这是因为?有代理人,有两个额外的代理人,V有代理人,e没有代理人. 如果我想
我试图更好地理解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:      H?      GetFirstCodePointSize = 1       Length =2
INPUT:      a??     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:                        

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读