日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

VC\JS Base64转码

發布時間:2025/3/20 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC\JS Base64转码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在使用fireBreath開發跨瀏覽器插件的過程中,遇到插件接口參數或返回值中文亂碼的問題,于是想起采用Base64先編碼,到插件函數內再解碼的方法。

亂碼原因:

1、VC源文件默認是ANSI編碼,API轉換時跟源文件使用的編碼有關系

一、 vc++類

//------------------------------------------------------------------------ //base64.h //------------------------------------------------------------------------ #ifndef ___BASE64_H___ #define ___BASE64_H___#include <string>using namespace std;class CBase64 { public:static bool Encode(const unsigned char *pIn, unsigned long uInLen, string& strOut);static bool Encode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen);static bool Decode(const string& strIn, unsigned char *pOut, unsigned long *uOutLen) ;static string Encode(string data); static string Decode(string data);static int GetDecodeBufferLength(string data);static string GBToUTF8(const char*); //將gb2312編碼轉為UTF-8字符static string UTF8ToGB(const char*); //將UTF-8編碼轉為gb2312字符 };#endif // ___BASE64_H___ //----------------------------------------------------------------------------- //base64.cpp //----------------------------------------------------------------------------- //#include "stdafx.h" #include "Base64.h" #include static const char *g_pCodes ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";static const unsigned char g_pMap[256] = {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,255, 254, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6,7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,255, 255, 255, 255 };bool CBase64::Encode(const unsigned char *pIn, unsigned long uInLen, unsigned char *pOut, unsigned long *uOutLen) {unsigned long i, len2, leven;unsigned char *p;if(pOut == NULL || *uOutLen == 0)return false;//ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL));len2 = ((uInLen + 2) / 3) << 2;if((*uOutLen) < (len2 + 1)) return false;p = pOut;leven = 3 * (uInLen / 3);for(i = 0; i < leven; i += 3){*p++ = g_pCodes[pIn[0] >> 2];*p++ = g_pCodes[((pIn[0] & 3) << 4) + (pIn[1] >> 4)];*p++ = g_pCodes[((pIn[1] & 0xf) << 2) + (pIn[2] >> 6)];*p++ = g_pCodes[pIn[2] & 0x3f];pIn += 3;}if (i < uInLen){unsigned char a = pIn[0];unsigned char b = ((i + 1) < uInLen) ? pIn[1] : 0;unsigned char c = 0;*p++ = g_pCodes[a >> 2];*p++ = g_pCodes[((a & 3) << 4) + (b >> 4)];*p++ = ((i + 1) < uInLen) ? g_pCodes[((b & 0xf) << 2) + (c >> 6)] : '=';*p++ = '=';}*p = 0; // Append NULL byte*uOutLen = p - pOut;return true; }bool CBase64::Encode(const unsigned char *pIn, unsigned long uInLen, string& strOut) {unsigned long i, len2, leven;strOut = "";//ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL));len2 = ((uInLen + 2) / 3) << 2;//if((*uOutLen) < (len2 + 1)) return false;//p = pOut;leven = 3 * (uInLen / 3);for(i = 0; i < leven; i += 3){strOut += g_pCodes[pIn[0] >> 2];strOut += g_pCodes[((pIn[0] & 3) << 4) + (pIn[1] >> 4)];strOut += g_pCodes[((pIn[1] & 0xf) << 2) + (pIn[2] >> 6)];strOut += g_pCodes[pIn[2] & 0x3f];pIn += 3;}if (i < uInLen){unsigned char a = pIn[0];unsigned char b = ((i + 1) < uInLen) ? pIn[1] : 0;unsigned char c = 0;strOut += g_pCodes[a >> 2];strOut += g_pCodes[((a & 3) << 4) + (b >> 4)];strOut += ((i + 1) < uInLen) ? g_pCodes[((b & 0xf) << 2) + (c >> 6)] : '=';strOut += '=';}//*p = 0; // Append NULL byte//*uOutLen = p - pOut;return true; }bool CBase64::Decode(const string& strIn, unsigned char *pOut, unsigned long *uOutLen) {unsigned long t, x, y, z;unsigned char c;unsigned long g = 3;//ASSERT((pIn != NULL) && (uInLen != 0) && (pOut != NULL) && (uOutLen != NULL));for(x = y = z = t = 0; x < strIn.length(); x++){c = g_pMap[strIn[x]];if(c == 255) continue;if(c == 254) { c = 0; g--; }t = (t << 6) | c;if(++y == 4){if((z + g) > *uOutLen) { return false; } // Buffer overflowpOut[z++] = (unsigned char)((t>>16)&255);if(g > 1) pOut[z++] = (unsigned char)((t>>8)&255);if(g > 2) pOut[z++] = (unsigned char)(t&255);y = t = 0;}}*uOutLen = z;return true; }string CBase64::Encode(string data) {string s;Encode((const unsigned char*)(data.c_str()),(unsigned long)data.length(),s);return s; }string CBase64::Decode(string data) {string s;unsigned char* bytBuf = NULL;unsigned long len = 0;char* pBuf = NULL;string sRet;len = (data.length() >> 2) * 3;bytBuf = new unsigned char[len];memset(bytBuf,0,len);Decode(data,bytBuf,&len);pBuf = new char[len+1];memset(pBuf,0,len+1);memcpy(pBuf,bytBuf,len);sRet = pBuf;delete[] bytBuf; bytBuf = NULL;delete[] pBuf; pBuf = NULL;return sRet; }int CBase64::GetDecodeBufferLength(string data) {int len = 0;len = (data.length() >> 2) * 3-2;return len; }string CBase64::GBToUTF8(const char* str) {std::string result;WCHAR *strSrc;TCHAR *szRes;//獲得臨時變量的大小int i = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);strSrc = new WCHAR[i+1];MultiByteToWideChar(CP_ACP, 0, str, -1, strSrc, i);//獲得臨時變量的大小i = WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, NULL, 0, NULL, NULL);szRes = new TCHAR[i+1];int j=WideCharToMultiByte(CP_UTF8, 0, strSrc, -1, (LPSTR)(LPCTSTR)szRes, i, NULL, NULL);result = (char*)szRes;delete []strSrc;delete []szRes;return result; }string CBase64::UTF8ToGB(const char* str) {std::string result;WCHAR *strSrc;TCHAR *szRes;//獲得臨時變量的大小int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);strSrc = new WCHAR[i+1];MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);//獲得臨時變量的大小i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);szRes = new TCHAR[i+1];WideCharToMultiByte(CP_ACP, 0, strSrc, -1, (LPSTR)(LPCTSTR)szRes, i, NULL, NULL);result = (char*)szRes;delete []strSrc;delete []szRes;return result; }

二 、js類

<script type="text/javascript"> /** * * Base64 encode / decode * * @author haitao.tu * @date 2010-04-26 * @email tuhaitao@foxmail.com * */function Base64() {// private property_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";// public method for encodingthis.encode = function (input) {var output = "";var chr1, chr2, chr3, enc1, enc2, enc3, enc4;var i = 0;input = _utf8_encode(input);while (i < input.length) {chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;if (isNaN(chr2)) {enc3 = enc4 = 64;} else if (isNaN(chr3)) {enc4 = 64;}output = output +_keyStr.charAt(enc1) + _keyStr.charAt(enc2) +_keyStr.charAt(enc3) + _keyStr.charAt(enc4);}return output;}// public method for decodingthis.decode = function (input) {var output = "";var chr1, chr2, chr3;var enc1, enc2, enc3, enc4;var i = 0;input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");while (i < input.length) {enc1 = _keyStr.indexOf(input.charAt(i++));enc2 = _keyStr.indexOf(input.charAt(i++));enc3 = _keyStr.indexOf(input.charAt(i++));enc4 = _keyStr.indexOf(input.charAt(i++));chr1 = (enc1 << 2) | (enc2 >> 4);chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);chr3 = ((enc3 & 3) << 6) | enc4;output = output + String.fromCharCode(chr1);if (enc3 != 64) {output = output + String.fromCharCode(chr2);}if (enc4 != 64) {output = output + String.fromCharCode(chr3);}}output = _utf8_decode(output);return output;}// private method for UTF-8 encoding_utf8_encode = function (string) {string = string.replace(/\r\n/g,"\n");var utftext = "";for (var n = 0; n < string.length; n++) {var c = string.charCodeAt(n);if (c < 128) {utftext += String.fromCharCode(c);} else if((c > 127) && (c < 2048)) {utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);} else {utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);}}return utftext;}// private method for UTF-8 decoding_utf8_decode = function (utftext) {var string = "";var i = 0;var c = c1 = c2 = 0;while ( i < utftext.length ) {c = utftext.charCodeAt(i);if (c < 128) {string += String.fromCharCode(c);i++;} else if((c > 191) && (c < 224)) {c2 = utftext.charCodeAt(i+1);string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));i += 2;} else {c2 = utftext.charCodeAt(i+1);c3 = utftext.charCodeAt(i+2);string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));i += 3;}}return string;} } </script>


三、調用例子

js

var b = new Base64();var dnName = "CN=寧子,O=電子公司,OU=研究部,L=鄭州市,S=河南省,C=CN,E=test@163.net";var s = b.encode(dnName);alert(s);s1 = b.decode(s); alert(s1);

vc

//參數:以base64編碼的字符串傳進去 std::string Func(const std::string dnName) {int nRet =0;char buf[2048] = {0};int len = 2048;std::string strGB2312DbName = CBase64::Decode(dnName);//解碼std::string strDnName = CBase64::UTF8ToGB(strGB2312DbName.c_str());//utf8->GB2312 }

源文件下載:http://download.csdn.net/detail/jiftlixu/6019275

總結

以上是生活随笔為你收集整理的VC\JS Base64转码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美乱综合图片区小说区 | 特级西西人体444www高清 | 亚洲一级Av无码毛片久久精品 | 亚洲成av人片在线观看无码 | 麻豆视频免费版 | 91人人看 | 国产精品毛片视频 | 亚洲不卡免费视频 | 欧美视频在线免费 | 免费在线观看一区二区三区 | 一级成人黄色片 | 96超碰在线| 欧美成人一二三区 | 日本69熟| 成年人免费大片 | 青青在线精品 | 午夜精品无码一区二区三区 | aav在线| 黄色污在线观看 | 打屁股av | 在线日韩中文字幕 | 黄网站在线播放 | 一区二区在线 | 亚洲乱码视频在线观看 | 黄色激情四射 | 中文字幕不卡一区 | 日韩在线网址 | 私拍在线| 黑人3p波多野结衣在线观看 | 国产精品无码永久免费不卡 | 国产第一亚洲 | 999伊人 | 人成在线| 欧美一区二区三区大屁股撅起来 | 久久视频这里只有精品 | 特黄色一级片 | 日韩精品自拍偷拍 | 自拍第一页 | 日韩有码一区 | 亚洲三区精品 | 少妇av片 | 日韩成人在线免费视频 | 日本三级韩国三级三级a级按摩 | 日韩成人在线播放 | 人妻 日韩 欧美 综合 制服 | 欧美大片www | 激情国产一区 | 性活交片大全免费看 | 国产麻豆精品久久一二三 | 另类三区 | 国产欧美亚洲精品 | 亚洲精品中文字幕乱码三区 | 国产成人精品免费视频 | 亚洲精品高清在线观看 | 日韩 欧美 亚洲 国产 | 亚洲精品日产精品乱码不卡 | 毛片网止 | 大度亲吻原声视频在线观看 | 91丝袜国产在线播放 | 99精品在线播放 | 激情四射网站 | 国产大奶在线观看 | 黄色大片一级片 | 在线观看国产成人 | 成年人黄色片网站 | 青草草在线 | 成人特级片 | 亚洲最大视频网 | 怡红院男人天堂 | 涩色视频 | 午夜精品一区二区三区免费视频 | 一级黄色短片 | 日本激情视频在线观看 | 美女视频91 | 超碰人人做| wwwxxxx欧美 | 一区二区精品在线观看 | 天天曰天天操 | 欧洲视频一区二区三区 | 日本在线观看a | 老司机亚洲精品 | 国产成人精品网 | 亚欧在线免费观看 | 国产在线最新 | 在线免费三级 | 欧美三级午夜理伦三级小说 | 爱av在线| 少妇性高潮视频 | 亚洲色图偷拍视频 | 国产乱色| 青青草视频在线免费观看 | 精品日韩制服无码久久久久久 | 黄色aaa视频 | 成人黄色在线播放 | 天堂av亚洲av国产av电影 | 香蕉久久精品日日躁夜夜躁 | 亚洲一区天堂 | 亲子乱aⅴ一区二区三区 | 浪漫樱花动漫在线观看免费 |