日韩性视频-久久久蜜桃-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转码的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩电影福利 | 777奇米视频 | 男女视频在线 | 亚洲av日韩av不卡在线观看 | 97超碰人人模人人人爽人人爱 | 日本亚洲色大成网站www久久 | 欧美少妇精品 | 午夜高清 | 边添小泬边狠狠躁视频 | 国产裸体永久免费无遮挡 | 国产免费看av | 欧美黑人又粗又大高潮喷水 | 欧美一区二区激情视频 | 久久在线视频 | 成人高清视频免费观看 | 亚洲午夜视频在线观看 | 伊人22 | sao虎视频在线精品永久 | 另类天堂网 | 国产在线视频你懂得 | 91高清免费视频 | 中国黄色一级毛片 | 亚洲国产成人精品女人久久久 | 国产亚洲午夜 | 精品无码一级毛片免费 | 97色干| 欧美激情一区二区三级高清视频 | 美女隐私无遮挡网站 | 国产激情一区二区三区在线观看 | 一区二区在线视频播放 | 蜜臀99久久精品久久久久久软件 | 亚洲欧美色图在线 | av猫咪| 欧美日韩高清一区二区 | av资源免费看 | 国产精品视频久久 | 久久久天天 | 色桃视频 | 在线观看福利片 | 干美女少妇 | av一道本 | 女儿的朋友4在线观看 | 免费一级淫片aaa片毛片a级 | 狠狠操狠狠操 | 国产超碰人人模人人爽人人添 | 在线综合视频 | 天天综合在线视频 | 精品久久久久久久久久久久久久久久 | 国产成人一区二区三区影院在线 | 国产系列精品av | 性做久久久久久免费观看 | 欧美亚洲色综久久精品国产 | 天天射天天爽 | 国产在线精品播放 | 欧美深夜福利 | 夜夜爽www | 在线观看免费福利 | 狠狠干综合| 日本伦理片在线看 | 久久久亚洲一区二区三区 | 天天干夜夜操视频 | 91热久久| 精品99视频 | 看一级黄色大片 | 亚洲精品中文在线 | 久久911 | 久久精品无码专区免费 | 国产视频一级 | 一区二区av电影 | 欧美挤奶吃奶水xxxxx | 日韩不卡一二三区 | 人人爱人人看 | 白浆四溢| 另类捆绑调教少妇 | 最近免费高清mv | 亚洲视频91 | 久久久香蕉 | 色婷婷久久久亚洲一区二区三区 | 亚洲国产精品久 | 亚洲成人精品在线 | 免费成人国产 | 亚洲美女视频在线观看 | www欧美精品 | 国产成人免费视频网站 | 久久久久久中文字幕 | 国产成人av一区二区三区不卡 | 男女草逼视频 | 精品国产无码一区二区 | 毛片毛片毛片毛片毛片 | 天堂最新 | 国产性爱精品视频 | 伊人色综合久久久 | 欧美资源在线 | 熟妇无码乱子成人精品 | 免费av日韩 | 中文字幕+乱码+中文字幕一区 | av999| 欧美视频在线观看一区二区三区 | 国产资源在线视频 |