C语言如何检测字符串是否为UTF-8编码?

2026-05-20 00:201阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计480个文字,预计阅读时间需要2分钟。

C语言如何检测字符串是否为UTF-8编码?

在C语言中,判断一个字符串是否为UTF-8编码,可以通过检查字符串中的每个字节是否符合UTF-8的编码规则来实现。以下是一个简化的函数,用于判断一个字符串是否是UTF-8编码。这个函数不会考虑所有可能的UTF-8编码错误,但可以处理常见的UTF-8编码规则。

C语言如何检测字符串是否为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编码?

在C语言中,判断一个字符串是否为UTF-8编码,可以通过检查字符串中的每个字节是否符合UTF-8的编码规则来实现。以下是一个简化的函数,用于判断一个字符串是否是UTF-8编码。这个函数不会考虑所有可能的UTF-8编码错误,但可以处理常见的UTF-8编码规则。

C语言如何检测字符串是否为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); }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!