Unicode 轉UTF-8 輸出中文
需求一
中文 ”你好啊“ ----------unicode----------> \u4F60\u597D\u554A
unicode編碼字符串轉中文。
例: “4F60597D554A” —> "你好啊”
解決方式
// 這裏使用C++11 的 codecvt_utf8
#include <iostream>
#include <codecvt>
#include <locale>
// "4F60597D554A" ---> "你好啊”
std::string unicodeToString(const std::string &str) {
std::string u8str;
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> converter;
for (size_t i = 0; i < str.length(); ) {
char32_t uhan = strtol(str.substr(i,4).c_str(), nullptr, 16);
u8str += converter.to_bytes(uhan);
i += 4;
}
return u8str;
}
int main() {
std::cout << unicodeToString("4F60597D554A" ) << std::endl;
return 0;
}
// 輸出:你好啊
需求二
unicode 字節數組轉中文
例:0x89 0x7F 0x5B 0x89 0x8D 0xEF —> 西安路
解決方式
#include <iostream>
#include <codecvt>
#include <locale>
// 0x89 0x7F 0x5B 0x89 0x8D 0xEF ---> 西安路
std::string unicodeToString(unsigned char* s_src, int len)
{
std::string u8str;
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> converter;
for (int i = 0; i < len; ) {
char32_t uhan = s_src[i] << 8 | s_src[i+1];
u8str += converter.to_bytes(uhan);
i += 2;
}
return u8str;
}
int main() {
unsigned char unicodeArr[6] = { 0x89, 0x7F, 0x5B, 0x89, 0x8D, 0xEF }
std::cout << unicodeToString(unicodeArr, 6) << std::endl;
return 0;
}
// 輸出:西安路