我想更好地理解Delphi中的代理对和Unicode实现。从Delphi字符串中检测和检索代码点和代理
如果我请的Unicode串S的长度():=“具有”在Delphi,我会回来,8.
这是因为,各个字符的长度[H],[A] ,[V]和[e]分别是2,3,2和1。这是因为Ĥ有替代物,有另外两个替代物,V有替代物,e没有替代物。
如果我想返回字符串中的第二个元素,包括所有代理,[à],我该怎么做?我知道我需要对单个字节进行某种测试。我使用例程运行了一些测试
function GetFirstCodepointSize(const S: UTF8String): Integer;
但得到了一些不寻常的结果,例如,这里是一些不同码点的长度和大小。 下面是我如何生成这些表格的片段。
...
UTFCRUDResultStrings.add('INPUT: '+#9#9+ DATA +#9#9+ 'GetFirstCodePointSize = ' +intToStr(GetFirstCodepointSize(DATA))
+#9#9+ 'Length =' + intToStr(length(DATA)));
...
第一组:这对我来说很有意义,每个代码点的大小一倍,但这些都是一个字每德尔福给我的长度只有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: GetFirstCodePointSize = 4 Length =2
INPUT: ß GetFirstCodePointSize = 2 Length =1
INPUT: GetFirstCodePointSize = 4 Length =2
是否有德尔福一种可靠的方法来确定一个元素在一个Unicode字符串开始和结束?
我知道使用单词元素的术语可能是关闭的,但我不认为代码点和字符是正确的,尤其是考虑到一个元素的代码点大小为3,但长度只有一个。
*有人能实现以下功能*这不是一个代码编写的服务,让您发表您的要求,有人搅动了代码来满足他们?尽你最大的努力来自己写。如果遇到困难,请发布您编写的代码,解释它如何不按照您的期望工作,并询问有关该代码的**特定问题**,我们可以尝试帮助您。 *请给我代码*在这里不是一个有效的问题。 –