C語言中判斷一個char*是不是utf8編碼
更新時間:2017年06月19日 10:38:29 投稿:lqh
這篇文章主要介紹了C語言中判斷一個char*是不是utf8編碼的相關(guān)資料,需要的朋友可以參考下
C語言中判斷一個char*是不是utf8編碼
里我修改了一下, 純ASCII編碼的字符串也返回true, 因為UTF8和ASCII兼容
實例代碼:
int utf8_check(const char* str, size_t length) {
size_t i;
int nBytes;
unsigned char chr;
i = 0;
nBytes = 0;
while (i < length) {
chr = *(str + i);
if (nBytes == 0) { //計算字節(jié)數(shù)
if ((chr & 0x80) != 0) {
while ((chr & 0x80) != 0) {
chr <<= 1;
nBytes++;
}
if ((nBytes < 2) || (nBytes > 6)) {
return 0; //第一個字節(jié)最少為110x xxxx
}
nBytes--; //減去自身占的一個字節(jié)
}
} else { //多字節(jié)除了第一個字節(jié)外剩下的字節(jié)
if ((chr & 0xC0) != 0x80) {
return 0; //剩下的字節(jié)都是10xx xxxx的形式
}
nBytes--;
}
i++;
}
return (nBytes == 0);
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇
這篇文章主要為大家詳細介紹了C++結(jié)構(gòu)體數(shù)組實現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03
C++使用模板實現(xiàn)單鏈表(類外實現(xiàn))
這篇文章主要為大家詳細介紹了C++使用模板實現(xiàn)單鏈表的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
C++數(shù)據(jù)結(jié)構(gòu)之實現(xiàn)鄰接表與鄰接矩陣的相互轉(zhuǎn)換
這篇文章主要為大家學(xué)習(xí)介紹了C++如何實現(xiàn)鄰接表與鄰接矩陣的相互轉(zhuǎn)換,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07
C語言 數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組模擬實現(xiàn)順序表流程詳解
順序表,全名順序存儲結(jié)構(gòu),是線性表的一種,線性表用于存儲邏輯關(guān)系為“一對一”的數(shù)據(jù),順序表自然也不例外,不僅如此,順序表對數(shù)據(jù)的物理存儲結(jié)構(gòu)也有要求,跟隨下文來具體了解吧2021-11-11

