C语言如何检测字符串是否为UTF-8编码?
- 内容介绍
- 文章标签
- 相关推荐
本文共计480个文字,预计阅读时间需要2分钟。
在C语言中,判断一个字符串是否为UTF-8编码,可以通过检查字符串中的每个字节是否符合UTF-8的编码规则来实现。以下是一个简化的函数,用于判断一个字符串是否是UTF-8编码。这个函数不会考虑所有可能的UTF-8编码错误,但可以处理常见的UTF-8编码规则。
cint utf8_check(const char *str, size_t length) { size_t i=0; int nBytes=0; // 当前字符的预计字节数
while (i if (nBytes==0) { // 如果当前字符是0xxxxxxx,它是一个ASCII字符 if (chr <0x80) { nBytes=1; } // 如果当前字符是110xxxxx,它是一个2字节字符 else if ((chr & 0xE0)==0xC0) { nBytes=2; } // 如果当前字符是1110xxxx,它是一个3字节字符 else if ((chr & 0xF0)==0xE0) { nBytes=3; } // 如果当前字符是11110xxx,它是一个4字节字符 else if ((chr & 0xF8)==0xF0) { nBytes=4; } // 否则,它不是一个有效的UTF-8开始字节 else { return 0; // 返回0表示不是UTF-8编码 } } else { // 对于后续字节,它们必须以10xxxxxx开始 if ((chr & 0xC0) !=0x80) { return 0; // 返回0表示不是UTF-8编码 } nBytes--; } i++; } // 如果所有字节都检查完毕,且没有未处理的字节,那么它是UTF-8编码 return nBytes==0;} 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) { //计算字节数
if ((chr & 0x80) != 0) {
while ((chr & 0x80) != 0) {
chr <<= 1;
nBytes++;
}
if ((nBytes < 2) || (nBytes > 6)) {
return 0; //第一个字节最少为110x xxxx
}
nBytes--; //减去自身占的一个字节
}
} else { //多字节除了第一个字节外剩下的字节
if ((chr & 0xC0) != 0x80) {
return 0; //剩下的字节都是10xx xxxx的形式
}
nBytes--;
}
i++;
}
return (nBytes == 0);
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文共计480个文字,预计阅读时间需要2分钟。
在C语言中,判断一个字符串是否为UTF-8编码,可以通过检查字符串中的每个字节是否符合UTF-8的编码规则来实现。以下是一个简化的函数,用于判断一个字符串是否是UTF-8编码。这个函数不会考虑所有可能的UTF-8编码错误,但可以处理常见的UTF-8编码规则。
cint utf8_check(const char *str, size_t length) { size_t i=0; int nBytes=0; // 当前字符的预计字节数
while (i if (nBytes==0) { // 如果当前字符是0xxxxxxx,它是一个ASCII字符 if (chr <0x80) { nBytes=1; } // 如果当前字符是110xxxxx,它是一个2字节字符 else if ((chr & 0xE0)==0xC0) { nBytes=2; } // 如果当前字符是1110xxxx,它是一个3字节字符 else if ((chr & 0xF0)==0xE0) { nBytes=3; } // 如果当前字符是11110xxx,它是一个4字节字符 else if ((chr & 0xF8)==0xF0) { nBytes=4; } // 否则,它不是一个有效的UTF-8开始字节 else { return 0; // 返回0表示不是UTF-8编码 } } else { // 对于后续字节,它们必须以10xxxxxx开始 if ((chr & 0xC0) !=0x80) { return 0; // 返回0表示不是UTF-8编码 } nBytes--; } i++; } // 如果所有字节都检查完毕,且没有未处理的字节,那么它是UTF-8编码 return nBytes==0;} 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) { //计算字节数
if ((chr & 0x80) != 0) {
while ((chr & 0x80) != 0) {
chr <<= 1;
nBytes++;
}
if ((nBytes < 2) || (nBytes > 6)) {
return 0; //第一个字节最少为110x xxxx
}
nBytes--; //减去自身占的一个字节
}
} else { //多字节除了第一个字节外剩下的字节
if ((chr & 0xC0) != 0x80) {
return 0; //剩下的字节都是10xx xxxx的形式
}
nBytes--;
}
i++;
}
return (nBytes == 0);
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

