Delphi擷取字串 防止中文截斷

2021-06-19 21:18:26 字數 531 閱讀 7317

在delphi中,用length來取字元長度時,會將漢字當成兩個位元組來計算,copy把漢字當成兩個來處理,可能擷取半個漢字,那我們如何知道是否取的是漢字呢?是否把乙個漢字取完整了呢?其實,可以用bytetype對取出來的字元進行判斷是乙個單字元還是漢字的一部分!mbleadbyte: 漢字的第乙個位元組mbtrailbyte: 漢字的第二個位元組mbsinglebyte: 單個的字元,不是中文字元。如果copy出來的是漢字的第乙個位元組,就再多(或少)copy乙個,湊成完整的漢字。如下例:

function gettext(strtxt:string;ilen:integer):string;

begin

//先判斷要擷取的字串最後乙個位元組的型別

//如果為漢字的第乙個位元組則減(加)一位

if bytetype(strtxt,ilen) = mbleadbyte then

ilen := ilen - 1;

result := copy(strtxt,1,ilen) + 』...『;

end;

中文擷取字串

echo mb substr 我abc的名字是肖巖 0,7,utf 8 我abc的名字 echo mb strcut 我abc的名字是肖巖 0,9,utf 8 我abc的 其中mb substr中的第三個引數代表字元個數,mb strcut函式中的第三個引數代表字元數,utf 8編碼下漢字3個字元 ...

Delphi中擷取字串

以擷取 號為例,edtspec 1為tedit,strspec為 號之前的字元,strspec2位 號之後的字元 starposition integer strspec,strspec1,strspec2 string starposition pos edtspec 1.text if star...

Delphi中擷取字串

如果要使用leftstr,rightstr,midstr必需引用系統單元strutils 宣告變數str string str helloworld 1,leftstr str,2 he 從str字串變數的最左邊 第乙個字元包括第乙個字元 開始擷取2個字元 2,rightstr str,2 ld 從...