1. 程式人生 > >C++ UTF8編碼轉換 CChineseCode

C++ UTF8編碼轉換 CChineseCode

複製程式碼
  1 class CChineseCode  
  2 
  3 {  
  4 
  5   public:  
  6 
  7       static void UTF_8ToUnicode(wchar_t* pOut,char *pText);  // 把UTF-8轉換成Unicode  
  8 
  9       static void UnicodeToUTF_8(char* pOut,wchar_t* pText);  //Unicode 轉換成UTF-8  
 10 
 11       static void UnicodeToGB2312(char* pOut,wchar_t uData);  //
把Unicode 轉換成 GB2312 12 13 static void Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer);// GB2312 轉換成 Unicode 14 15 static void GB2312ToUTF_8(string& pOut,char *pText, int pLen);//GB2312 轉為 UTF-8 16 17 static void UTF_8ToGB2312(string &pOut, char *pText, int pLen);//
UTF-8 轉為 GB2312 18 19 }; 20 21 類實現 22 23 void CChineseCode::UTF_8ToUnicode(wchar_t* pOut,char *pText) 24 25 { 26 27 char* uchar = (char *)pOut; 28 29 uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F); 30 31 uchar[0] = ((pText[1] & 0x03
) << 6) + (pText[2] & 0x3F); 32 33 return; 34 35 } 36 37 void CChineseCode::UnicodeToUTF_8(char* pOut,wchar_t* pText) 38 39 { 40 41 // 注意 WCHAR高低字的順序,低位元組在前,高位元組在後 42 43 char* pchar = (char *)pText; 44 45 pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4)); 46 47 pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[0] & 0xC0) >> 6); 48 49 pOut[2] = (0x80 | (pchar[0] & 0x3F)); 50 51 return; 52 53 } 54 55 void CChineseCode::UnicodeToGB2312(char* pOut,wchar_t uData) 56 57 { 58 59 WideCharToMultiByte(CP_ACP,NULL,&uData,1,pOut,sizeof(wchar_t),NULL,NULL); 60 61 return; 62 63 } 64 65 void CChineseCode::Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer) 66 67 { 68 69 ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1); 70 71 return ; 72 73 } 74 75 void CChineseCode::GB2312ToUTF_8(string& pOut,char *pText, int pLen) 76 77 { 78 79 char buf[4]; 80 81 int nLength = pLen* 3; 82 83 char* rst = new char[nLength]; 84 85 memset(buf,0,4); 86 87 memset(rst,0,nLength); 88 89 int i = 0; 90 91 int j = 0; 92 93 while(i < pLen) 94 95 { 96 97 //如果是英文直接複製就可以 98 99 if( *(pText + i) >= 0) 100 101 { 102 103 rst[j++] = pText[i++]; 104 105 } 106 107 else 108 109 { 110 111 wchar_t pbuffer; 112 113 Gb2312ToUnicode(&pbuffer,pText+i); 114 115 UnicodeToUTF_8(buf,&pbuffer); 116 117 unsigned short int tmp = 0; 118 119 tmp = rst[j] = buf[0]; 120 121 tmp = rst[j+1] = buf[1]; 122 123 tmp = rst[j+2] = buf[2]; 124 125 j += 3; 126 127 i += 2; 128 129 } 130 131 } 132 133 rst[j] = ''; 134 135 //返回結果 136 137 pOut = rst; 138 139 delete []rst; 140 141 return; 142 143 } 144 145 void CChineseCode::UTF_8ToGB2312(string &pOut, char *pText, int pLen) 146 147 { 148 149 char * newBuf = new char[pLen]; 150 151 char Ctemp[4]; 152 153 memset(Ctemp,0,4); 154 155 int i =0; 156 157 int j = 0; 158 159 while(i < pLen) 160 161 { 162 163 if(pText > 0) 164 165 { 166 167 newBuf[j++] = pText[i++]; 168 169 } 170 171 else 172 173 { 174 175 WCHAR Wtemp; 176 177 UTF_8ToUnicode(&Wtemp,pText + i); 178 179 UnicodeToGB2312(Ctemp,Wtemp); 180 181 newBuf[j] = Ctemp[0]; 182 183 newBuf[j + 1] = Ctemp[1]; 184 185 i += 3; 186 187 j += 2; 188 189 } 190 191 } 192 193 newBuf[j] = ''; 194 195 pOut = newBuf; 196 197 delete []newBuf; 198 199 return; 200 201 }
複製程式碼

相關推薦

C++ UTF8編碼轉換 CChineseCode

1 class CChineseCode 2 3 { 4 5 public: 6 7 static void UTF_8ToUnicode(wchar_t* pOut,char *pText); // 把UTF-8轉換成Unicode

C語言編碼轉換gb2312 to utf8utf8 to gb2312 代碼,GCC編譯,支持Windows、Linux

inb style fine mem amp blog linu print from 編譯:gcc -o f.exe f.c -liconv #include <stdio.h> #include <stdlib.h> #include <

c++ UTF8編碼轉為多位元組編碼

// UTF8編碼轉為多位元組編碼 string ThriftCommon_ThriftCommonOpt_presult::UTF8ToGBK(const char* strUTF8) { i

C++ pugixml 編碼轉換

#include <iostream> #include <string> #include <windows.h> #include "pugixml.hpp" #include "convert.h" using std::cout; using std:

linux c 字元編碼轉換函式 iconv

一、利用iconv函式族進行編碼轉換 在LINUX上進行編碼轉換時,既可以利用iconv函式族程式設計實現,也可以利用iconv命令來實現,只不過後者是針對檔案的,即將指定檔案從一種編碼轉換為另一種編碼。 iconv函式族的標頭檔案是iconv.h,使用前需包含之。 #

C# 文字編碼轉換

1.  C#的編碼轉換預設由System.Text.Encoding進行操控轉換. 引用為: using System.Text; 2.  C# Encoding類自帶編碼有:UTF7/UTF8/UTF32/Unicode/ASCII, Encoding類有一個子

不依賴任何系統API,用c語言實現gbk/utf8/unicode編碼轉換

轉載地址:https://blog.csdn.net/bladeandmaster88/article/details/54837338 漢字'我' Unicode編碼是0x6211       01100010 00010001 UTF8編碼是&

編碼轉換(gbk2utf8,by c++),判斷編碼格式是否為utf8

#include <iconv.h> #include #include bool IsTextUTF8(const char* str,int length) { int nBytes=0;//UFT8可用1-6個位元組編碼,

c++對編碼格式ANSI utf8 unicode 進行轉換

Windows下有很多種編碼格式,在與別的系統環境中有檔案傳輸或通訊時,這些編碼就很重要。 比如在windows中換行是\r\n 在linux或mac下是\n,如果不對編碼進行轉換就會出現亂碼。在通訊

C#中圖片轉換為Base64編碼,Base64編碼轉換為圖片

byte[] agen oms ase gef urn for app raw #region 圖片轉為base64編碼的字符串 public string ImgToBase64String(string Imagefilename) {

(轉載)GBK、UTF8、UNICODE編碼轉換

url multi end lsm too vcs BE else bsp GBK、UTF8、UNICODE編碼轉換 1 string GBKToUTF8(const std::string& strGBK) 2 { 3 int nLen = Mu

php字符編碼轉換之gb2312轉為utf8(轉)

The 執行效率 val 默認 odin net request nor 原因 在php中字符編碼轉換我們一般會用到iconv與mb_convert_encoding進行操作,但是mb_convert_encoding在轉換性能上比iconv要差很多哦。string ico

Java & C# BCD編碼與十進位制轉換

目錄 BCD碼介紹  Java版本互轉工具 C#版本互轉工具 BCD碼介紹 BCD碼(Binary-Coded Decimal‎)亦稱二進碼十進數或二-十進位制程式碼。用4位二進位制數來表示1位十進位制數中的0~9這10個數碼。是一種二進位制的數字編碼形式

C/CPP UTF8編碼轉成漢字 \u7528\u6237\u4e0d

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C#實戰015:Excel操作-字元編碼轉換

     在讀取Excel時遇到一個問題,那就是讀取出來的單表出現了亂碼的現象,我們可以看到很多漢字無法識別出來。          在存入時對字元編碼進行指定: public void getHeader

php utf8編碼和gbk編碼相互轉換

1.utf8轉換為gbk header("Content-type:text/html;charset=UTF-8"); echo $str= 'utf8轉gbk!'; echo '<br />'; echo iconv("UTF-8

C++ Unicode與UTF_8 編碼轉換

void UTF_8ToUnicode(wchar_t* pOut,char *pText){ char* uchar = (char *)pOut; uchar[1] = ((pTex

C語言下使用iconv函式實現字元編碼轉換

1.iconv相關函式介紹 iconv命令是用來轉換檔案的編碼方式的(Convert encoding of given files from one encoding to another),比如它可以將UTF8編碼的轉換成GB18030的編碼,反過來也行。一般linux下包含iconv指令: 格式:ico

Qt中GB編碼UTF8編碼轉換

1、gbk轉換為utf-8 QString strUtf8=QString::fromLocal8Bit(char* strGBK); 2、utf-8轉換為gbk QString strGBk = QString::fromUtf8(QString strUtf8);

C++:中文編碼轉換

在介紹如何使用C++11標準庫進行中文編碼轉換之前,先說說一下byte string、multibyte string、wide string之間的區別。 byte string 由8位元的位元組組成的字串。由char表示位元組。因而字串長度=位元組數=char數 m