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