//=======================================================
// 从start开始 截取中英混合字符 遵循GBK编码规则
//
//=======================================================
std::string substr(const char * data, int start, int length){
std::string temp = data;
std::string res;
//=======================================================
// 从start开始 截取中英混合字符 遵循GBK编码规则
//
//=======================================================
for (int i = start; i < temp.length() && i < length; i++){
//==========================================
// 获取第一位在内存中的数值
//==========================================
unsigned short first_char = temp.at(i);
//==========================================
// 初始化第二位在内存中的数值
//==========================================
unsigned short sencond_char = 0;
//==========================================
// 如果第2位不越界,初始化第二位在内存中的数值
//==========================================
if (i + 1 != length && i + 1 != temp.length()){
sencond_char = temp.at(i + 1);
}
//=================================================
// 如果第一位的字符中包含在0xff81 至 0xffff (GBK编码)
//=================================================
if (first_char >= 0xff81 && first_char <= 0xffff){
// 如果第二位有值
if (sencond_char >= 0x40 && sencond_char <= 0xffff){
res += first_char;
res += sencond_char;
// 向右多偏移一位
i++;
}
// 如果第二位已越界
else{
break;
}
}
//==================================================
// 如果第一位不在GBK编码中
//==================================================
else{
res += first_char;
}
}
return res;
}
C++处理 中英字混合截断乱码[中码GBK,英码ASCII]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.