utf 8編碼的字串怎麼檢測它實際渲染出來的長度,如果超過長度就用省略號補上到末尾?

時間 2022-01-04 16:50:52

1樓:海盜船長

完美的方法:檢視二進位制位元組碼,utf8編碼規則,每乙個以1開頭的位元組表示乙個字元的開始,所以有多少個1開頭的位元組,就有多少個字元。問,怎麼檢視位元組碼,如果語言不支援,那就從記憶體裡面,拿個顯微鏡和萬用電表,自己測一測吧

2樓:被遺失De跳刀

渲染長度本身是和編碼沒有關係的,編碼只是說什麼字對應的計算機記憶體資料是什麼,渲染是由字型檔案決定的。

我知道的字型渲染在遊戲領域用的比較多的是freetype,它的功能就是給定乙個字型檔案和乙個編碼,然後可以獲得乙個8位的點陣圖,然後再由引擎把這個位圖渲染到螢幕上,所以渲染的寬度是由你的字型檔案,和字型大小決定的,就是你這個點陣圖的size。

回到問題本身,給定一段文字

foreach utf8編碼

獲取位圖;

渲染;寬度累加;

if 超過規定長度,

補充渲染「...」

break;

endend

希望有幫助

3樓:lbblscy

關鍵不在於UTF-8編碼,還要考慮渲染採用的字型、字型大小、樣式等引數。

可以借鑑Qt裡面QFontMetrics的實現:

4樓:hillin

每個文字渲染引擎都會提供這樣的功能。Unity裡面可以用這個:

5樓:Belleve

中英文的話你有字型就可以讀尺寸(hmtx/CFF)算出來。但是你要支援其他語種……

這是 Devanagari 的排版過程,經過了大量的符號替換、順序重排,來,你知道具體的規則麼?

烏爾都語使用的 Nastaliq 式阿拉伯文甚至是斜的

6樓:

渲染的長度,那還和字型字型大小字型有關啊~~你到底要渲染效果還是只是要算一下字串佔位數量?

拋開字型的問題,單說不同語言的文字,根據unicode碼表,所有支援的語言,你基本總結一下你需要的文字每個字元的寬度,比如你說的英文1,中文2,還有其他的。

具體判斷語言就按照unicode碼表來,比如:

Armenia:0x0530, 0x058f

Arabic:0x0600, 0x06FF;0x0750, 0x077F;0xFB50, 0xFDFF;0xFE70, 0xFEFF

中日韓漢字:0x4E00, 0x9FBF;0x3400, 0x4DBF;0x20000, 0x2A6DF;0xF900, 0xFAFF;0x2F800, 0x2FA1F;

c語言怎麼從字串中提取自己想要的字元?

如果僅限英文本母數字等鍵盤上打的出的符號,那問題在於 你想要 的字元是啥,怎麼定義想要 滿足什麼條件 條件複雜可能還要用到正規表示式,甚至自己寫parser 坑是無窮無盡的,一切取決於你想要啥 如果包含中文等等世界各國語言的字元,還需要去學習 字元編碼 utf 8 gbk utf 16le utf ...

Python中怎麼提取字串中的漢字?

Datawhale 採用正規表示式的方法對字串進行處理。str1 我 是,速 度 發 中 國 人 1 提取漢字 漢字的範圍為 u4e00 u9fa5 這個是用Unicode表示的 import reres1 join re findall u4e00 u9fa5 str1 print res1 輸出...

求助高手,關於C語言的,怎麼在統計字串的基礎上判斷我輸入的是英文本母?

參考思路是先分詞,再判斷每個詞是不是乙個單詞。模型先簡單點,假設分隔單詞的字元只有空格,單詞只由英文本元組成而且大小寫不敏感。分詞就要實現 string.Split C 語言沒有作為基礎型別的 string,要麼實現乙個,要麼轉換思路 因為只有讀取動作,返回 char 不一定要另外開闢記憶體,比如接...