//=======================================================
// 從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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.