下面是完整的攻略:
1. 判断字符串编码格式
在过滤字符串中的中文之前,我们需要先判断字符串的编码格式。因为GBK和UTF-8编码下的中文字符的字节长度是不同的。
1.1 GBK编码格式
在GBK编码下,每个中文字符由2个字节组成。所以我们可以通过判断每个字符的字节长度是否为2来判断字符串的编码格式是GBK。
bool isGBK(const char* str) {
for (int i = 0; str[i]; i++) {
// 编码范围:0x80 ~ 0xFE
if (str[i] & 0x80) {
if (!(str[i+1] && (str[i+1] & 0x80))) {
return false;
}
i++;
}
}
return true;
}
1.2 UTF-8编码格式
在UTF-8编码下,每个中文字符由3个字节组成。所以我们可以通过判断每个字符的字节长度是否为3来判断字符串的编码格式是UTF-8。
bool isUTF8(const char* str) {
for (int i = 0; str[i]; i++) {
if (str[i] & 0x80) { // 这是UTF-8编码的中文字符的特征
if (!((str[i] & 0xE0) == 0xE0 && (str[i+1] & 0x80) && (str[i+2] & 0x80))) {
return false;
}
i += 2;
}
}
return true;
}
2. 过滤中文
我们已经知道了如何判断字符串的编码格式,接下来就可以过滤出中文字符了。
2.1 过滤GBK编码字符串中的中文
void filterChineseFromGBK(const char* str) {
for (int i = 0; str[i]; i++) {
if (str[i] & 0x80) { // 中文字符的字节长度为2
printf("%c%c", str[i], str[i+1]);
i++;
}
}
}
2.2 过滤UTF-8编码字符串中的中文
void filterChineseFromUTF8(const char* str) {
for (int i = 0; str[i]; i++) {
if (str[i] & 0x80) { // 中文字符的字节长度为3
printf("%c%c%c", str[i], str[i+1], str[i+2]);
i += 2;
}
}
}
以上就是C++如何过滤出字符串的中文(GBK、UTF-8)的完整攻略,希望对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++如何过滤出字符串的中文(GBK、UTF-8) - Python技术站