国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中可正確獲取UTF-8字符長度的函數分享

2020-05-23 14:22:23
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++中可正確獲取UTF-8字符長度的函數分享,需要的朋友可以參考下
 
 

在C++的char*以及string中,使用的是字節流編碼,即sizeof(char) == 1。

也就是說,C++是不區分字符的編碼的。

而一個合法UTF8的字符長度可能為1~4位。

現在假設一串輸入為UTF8編碼,如何能準確的定位到每個UTF8字符的“CharPoint”,而不會錯誤的分割字符呢?

參考這個頁面:http://www.nubaria.com/en/blog/?p=289

可以改造出下面的函數:

const unsigned char kFirstBitMask = 128; // 1000000const unsigned char kSecondBitMask = 64; // 0100000const unsigned char kThirdBitMask = 32; // 0010000const unsigned char kFourthBitMask = 16; // 0001000const unsigned char kFifthBitMask = 8; // 0000100 int utf8_char_len(char firstByte){  std::string::difference_type offset = 1;  if(firstByte & kFirstBitMask) // This means the first byte has a value greater than 127, and so is beyond the ASCII range.  {      if(firstByte & kThirdBitMask) // This means that the first byte has a value greater than 224, and so it must be at least a three-octet code point.    {        if(firstByte & kFourthBitMask) // This means that the first byte has a value greater than 240, and so it must be a four-octet code point.        offset = 4;      else        offset = 3;    }      else    {        offset = 2;    }    }    return offset;}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玛沁县| 营口市| 剑阁县| 本溪市| 普兰店市| 徐州市| 米泉市| 聊城市| 彭水| 双桥区| 壶关县| 宣城市| 上虞市| 休宁县| 滦南县| 景谷| 永昌县| 鹤山市| 海林市| 林芝县| 湖北省| 瑞安市| 威远县| 彰化市| 多伦县| 安丘市| 湾仔区| 营山县| 梁河县| 临西县| 淳化县| 千阳县| 河源市| 茌平县| 湘西| 乳山市| 龙川县| 获嘉县| 大理市| 乌鲁木齐市| 堆龙德庆县|