DelphiXE Ansi字串UTF 8編碼判斷

2021-07-28 04:00:12 字數 1812 閱讀 2764

找了半天也沒找到delphi語言直接可用的utf-8編碼判斷的**

以下**摘抄改編於

#7 使用者id: xiaoc1026

回答的c++**

ide為delphixe

/// 

/// 判斷字串是否為 utf-8 編碼

///

/// 輸入字串

/// 輸入是否為 utf-8 編碼

function

iswordsutf8

(ansistr: ansistring): boolean;

var i, icount, chr: integer;

c: ansichar;

nbytes: integer; // uft-8可用1-6個位元組編碼,ascii用乙個位元組

ballascii: boolean; // 如果全部都是ascii, 說明不是utf-8

begin

result := false;

nbytes := 0;

ballascii := true;

icount := length(ansistr);

for i := 1

to icount do

begin

c := ansistr[i];

chr := ord(c);

// 判斷是否ascii編碼,如果不是,說明有可能是utf-8,ascii用7位編碼,但用乙個位元組存,最高位標記為0,o0******x;中文ascii編碼可能最高位為1

if (chr and $80) <> 0

then

ballascii := false;

// 如果不是ascii碼,應該是多位元組符,計算位元組數

if nbytes = 0

then

begin

if chr > $80

then

begin

if (chr>=$fc) and (chr<=$fd) then

// 1111 1100 and 1111 1101

nbytes := 6

else

if chr>=$f8 then

// 1111 1000

nbytes := 5

else

if chr>=$f0 then

// 1111 0000

nbytes := 4

else

if chr>=$e0 then

// 1110 0000

nbytes := 3

else

if chr>=$c0 then

// 1100 0000

nbytes := 2

else

exit(false);

dec(nbytes);

end;

endelse

// 多位元組符的非首位元組,應為 10******

begin

if (chr and $c0) <> $80

then

exit(false);

dec(nbytes);

end;

end;

// 違返規則

if nbytes > 0

then

exit(false);

// 如果全部都是ascii, 說明不是 utf-8

if ballascii then

exit(false);

result := true;

end;

ORACLE in 字串,字串,字串

因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...

字串物件python int 字串 字串物件

最近研究字串物件,稍微總結一下,以後繼續補充 如果我們須要把python的字串物件轉換為數整物件,我們須要用到int方法。比如 ainfo 222 print int ainfo 輸出的結果是222。然後我們檢視下ainfo在現的型別,通過type方法檢視下,發現是 而如果ainfo fefew22...