string ToHalf1(string str) { string result = ""; unsigned char tmp; unsigned char tmp1; for (unsigned int i = 0; i < str.length(); i++) { tmp = str[i]; tmp1 = str[i + 1]; // cout << "uchar:" << (int) tmp << endl; if (tmp == 163) {///第一个字节是163,标志着是全角字符 result += (unsigned char) str[i + 1] - 128; i++; continue; } else if (tmp > 163) {//汉字 result += str.substr(i, 2); i++; continue; } else if (tmp == 161 && tmp1 == 161) {///处理全角空格 result += ""; i++; } else { result += str.substr(i, 1); } } return result; }
std::string utf8_tohalf(std::string input) { std::string temp; for (size_t i = 0; i < input.size(); i++) { if (((input[i] & 0xF0) ^ 0xE0) == 0) { int old_char = (input[i] & 0xF) << 12 | ((input[i + 1] & 0x3F) << 6 | (input[i + 2] & 0x3F)); if (old_char == 0x3000) { // blank char new_char = 0x20; temp += new_char; } else if (old_char >= 0xFF01 && old_char <= 0xFF5E) { // full char char new_char = old_char - 0xFEE0; temp += new_char; } else { // other 3 bytes char temp += input[i]; temp += input[i + 1]; temp += input[i + 2]; } i = i + 2; } else { temp += input[i]; } } return temp; }