C++处理 中英字混合截断乱码[中码GBK,英码ASCII]

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