1. 程式人生 > >utf-8 字串轉 unicode 字串

utf-8 字串轉 unicode 字串

utf-8編碼簡介

utf-8編碼是一種變長編碼, 中文字元用三個byte來儲存,而編碼範圍在 0 到 0x7f 則使用1個位元組儲存

Number of bytes Bits for code point First code point Last code point Byte1 Byte2 Byte3 Byte4
1 7 U+0000 U+007F 0xxxxxxx
2 11 U+0080 U+07FF 110xxxxx 10xxxxxx
3 16 U+0800 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
4 21 U+10000 U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

以下是編碼例子,這些都是來自於維基百科

這裡寫圖片描述

以下程式碼能把 utf-8 多位元組字串,轉換成為unicode 字串,如轉載請註明出處

static int z_pos(uint8_t x)
{
    for (int i = 0; i < 5; i++, x <<= 1) {
        if ( (x & 0x80) == 0 )
            return i;
    }

    return
4; } // convert UTF-8 string to wstring std::wstring utf8_to_wstring(const std::string& str) { std::wstring loc; uint8_t mask[5] = { 0x7f, 0x3f, 0x1f, 0x0f, 0x7}; for (size_t i = 0; i < str.length();) { int byte_cnt = z_pos(str[i]); uint16_t sum = str[i] & mask[byte_cnt]; for
(size_t j = 1; j < byte_cnt; j++) { sum <<= 6; sum |= str[i+j] & mask[1]; } i += byte_cnt ? byte_cnt : 1; loc.push_back(sum); } return loc; }