我想更好地理解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,但長度只有一個。
*有人能實現以下功能*這不是一個代碼編寫的服務,讓您發表您的要求,有人攪動了代碼來滿足他們?盡你最大的努力來自己寫。如果遇到困難,請發佈您編寫的代碼,解釋它如何不按照您的期望工作,並詢問有關該代碼的**特定問題**,我們可以嘗試幫助您。 *請給我代碼*在這裏不是一個有效的問題。 –