C++  Unicode 轉UTF-8 輸出中文

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