200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > c/c++ base64编码后 通过php解码 中文乱码解决办法

c/c++ base64编码后 通过php解码 中文乱码解决办法

时间:2022-05-27 03:09:39

相关推荐

c/c++ base64编码后 通过php解码 中文乱码解决办法

1. c/c++ base64编码后的内容为:

$base64_encode="IMf9tq/G9yBEINbQtcS+7crHIExFTk9WTwogvu21xNDywdC6xcrHIDU4N0EtOTcyNgoKIEQ6XHdvcmtcZnVodWFcc29rZXRfMl92Mlxzb2tldF8yILXExL/CvAoKMjAxOC8wOC8zMSAgMTc6MjAgICAgPERJUj4gICAgICAgICAgLgoyMDE4LzA4LzMxICAxNzoyMCAgICA8RElSPiAgICAgICAgICAuLgoyMDE4LzA4LzMxICAxNzoyNiAgICAgICAgICAgICAyLDgyNiBiYXNlNjQuY3BwCjIwMTgvMDgvMzEgIDE3OjI2ICAgICAgICAgICAgICAgMTUxIGJhc2U2NC5oCjIwMTgvMDkvMDMgIDE2OjIyICAgIDxESVI+ICAgICAgICAgIERlYnVnCjIwMTgvMDgvMTQgIDA5OjM3ICAgICAgICAgICAgIDEsNTUzIFJlYWRNZS50eHQKMjAxOC8wOC8zMSAgMDk6NTUgICAgPERJUj4gICAgICAgICAgUmVsZWFzZQoyMDE4LzA4LzMxICAxNzoyOCAgICAgICAgICAgICA0LDQ0OSBzb2tldF8yLnZjeHByb2oKMjAxOC8wOC8zMSAgMTc6MjggICAgICAgICAgICAgMSw0OTQgc29rZXRfMi52Y3hwcm9qLmZpbHRlcnMKMjAxOC8wOC8xNCAgMDk6MzcgICAgICAgICAgICAgICAxNDMgc29rZXRfMi52Y3hwcm9qLnVzZXIKMjAxOC8wOS8wMyAgMTY6MTkgICAgICAgICAgICAgOCw0MzAgc29rZXRfY2xpZW50LmNwcAoyMDE4LzA4LzE0ICAwOTozNyAgICAgICAgICAgICAgIDIxMiBzdGRhZnguY3BwCjIwMTgvMDgvMTQgIDA5OjM3ICAgICAgICAgICAgICAgMjMzIHN0ZGFmeC5oCjIwMTgvMDgvMTQgIDA5OjM3ICAgICAgICAgICAgICAgMjM2IHRhcmdldHZlci5oCjIwMTEvMDUvMTQgIDE5OjI0ICAgICAgICAgICAgIDgsMTk4IHRpbnlzdHIuaAoyMDExLzA1LzE0ICAxOToyNCAgICAgICAgICAgIDY0LDgzNCB0aW55eG1sLmgKICAgICAgICAgICAgICAxMiC49s7EvP4gICAgICAgICA5Miw3NTkg19a92gogICAgICAgICAgICAgICA0ILj2xL/CvCA5NywxMjMsMDkwLDQzMiC/ydPD19a92go=";

通过c/c++进行base64解码,也没有出现中文乱码问题,但是用Php解码后,在网页上显示中文就乱码了。

2. 通过fiddler或者网上在线base64解码发现,解码后中文也是乱码的:

������ D �еľ��� LENOVO������к��� 587A-9726D:\work\fuhua\soket_2_v2\soket_2 ��Ŀ¼/08/31 17:20 <DIR> ./08/31 17:20 <DIR> ../08/31 17:26 2,826 base64.cpp/08/31 17:26 151 base64.h/09/03 16:22 <DIR> Debug/08/14 09:37 1,553 ReadMe.txt/08/31 09:55 <DIR> Release/08/31 17:28 4,449 soket_2.vcxproj/08/31 17:28 1,494 soket_2.vcxproj.filters/08/14 09:37 143 soket_2.vcxproj.user/09/03 16:19 8,430 soket_client.cpp/08/14 09:37 212 stdafx.cpp/08/14 09:37 233 stdafx.h/08/14 09:37 236 targetver.h/05/14 19:24 8,198 tinystr.h/05/14 19:24 64,834 tinyxml.h12 ���ļ� 92,759 �ֽ�4 ��Ŀ¼ 97,123,090,432 �����ֽ�

3. 解决办法如下(php编写),通过如下函数进行转换:

function decode($text){define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));$first2 = substr($text, 0, 2);$first3 = substr($text, 0, 3);$first4 = substr($text, 0, 3);$encodType = "";if ($first3 == UTF8_BOM)$encodType = 'UTF-8 BOM';else if ($first4 == UTF32_BIG_ENDIAN_BOM)$encodType = 'UTF-32BE';else if ($first4 == UTF32_LITTLE_ENDIAN_BOM)$encodType = 'UTF-32LE';else if ($first2 == UTF16_BIG_ENDIAN_BOM)$encodType = 'UTF-16BE';else if ($first2 == UTF16_LITTLE_ENDIAN_BOM)$encodType = 'UTF-16LE';//下面的判断主要还是判断ANSI编码的·if ($encodType == '') {//即默认创建的txt文本-ANSI编码的$content = iconv("GBK", "UTF-8", $text);} else if ($encodType == 'UTF-8 BOM') {//本来就是UTF-8不用转换$content = $text;} else {//其他的格式都转化为UTF-8就可以了$content = iconv($encodType, "UTF-8", $text);}return $content;}

转码后,中文显示正常了,结果如下图:

4. 附上全部测试代码:

<?php$base64_encode="IMf9tq/G9yBEINbQtcS+7crHIExFTk9WTwogvu21xNDywdC6xcrHIDU4N0EtOTcyNgoKIEQ6XHdvcmtcZnVodWFcc29rZXRfMl92Mlxzb2tldF8yILXExL/CvAoKMjAxOC8wOC8zMSAgMTc6MjAgICAgPERJUj4gICAgICAgICAgLgoyMDE4LzA4LzMxICAxNzoyMCAgICA8RElSPiAgICAgICAgICAuLgoyMDE4LzA4LzMxICAxNzoyNiAgICAgICAgICAgICAyLDgyNiBiYXNlNjQuY3BwCjIwMTgvMDgvMzEgIDE3OjI2ICAgICAgICAgICAgICAgMTUxIGJhc2U2NC5oCjIwMTgvMDkvMDMgIDE2OjIyICAgIDxESVI+ICAgICAgICAgIERlYnVnCjIwMTgvMDgvMTQgIDA5OjM3ICAgICAgICAgICAgIDEsNTUzIFJlYWRNZS50eHQKMjAxOC8wOC8zMSAgMDk6NTUgICAgPERJUj4gICAgICAgICAgUmVsZWFzZQoyMDE4LzA4LzMxICAxNzoyOCAgICAgICAgICAgICA0LDQ0OSBzb2tldF8yLnZjeHByb2oKMjAxOC8wOC8zMSAgMTc6MjggICAgICAgICAgICAgMSw0OTQgc29rZXRfMi52Y3hwcm9qLmZpbHRlcnMKMjAxOC8wOC8xNCAgMDk6MzcgICAgICAgICAgICAgICAxNDMgc29rZXRfMi52Y3hwcm9qLnVzZXIKMjAxOC8wOS8wMyAgMTY6MTkgICAgICAgICAgICAgOCw0MzAgc29rZXRfY2xpZW50LmNwcAoyMDE4LzA4LzE0ICAwOTozNyAgICAgICAgICAgICAgIDIxMiBzdGRhZnguY3BwCjIwMTgvMDgvMTQgIDA5OjM3ICAgICAgICAgICAgICAgMjMzIHN0ZGFmeC5oCjIwMTgvMDgvMTQgIDA5OjM3ICAgICAgICAgICAgICAgMjM2IHRhcmdldHZlci5oCjIwMTEvMDUvMTQgIDE5OjI0ICAgICAgICAgICAgIDgsMTk4IHRpbnlzdHIuaAoyMDExLzA1LzE0ICAxOToyNCAgICAgICAgICAgIDY0LDgzNCB0aW55eG1sLmgKICAgICAgICAgICAgICAxMiC49s7EvP4gICAgICAgICA5Miw3NTkg19a92gogICAgICAgICAgICAgICA0ILj2xL/CvCA5NywxMjMsMDkwLDQzMiC/ydPD19a92go=";$result=base_decode($base64_encode);var_dump($result);function base_decode($encode_str){$base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";$ret="";$in_len = strlen($encode_str);$i = 0;$j = 0;$in_ = 0;$char_array_4=array();$char_array_3=array();while($in_<$in_len){$char_array_4[$i++]=$encode_str[$in_]; $in_++;if($i==4){for ($i = 0; $i <4; $i++){$char_array_4[$i] = strpos($base64_chars,$char_array_4[$i]);}$char_array_3[0] = ($char_array_4[0] << 2) + (($char_array_4[1] & 0x30) >> 4);$char_array_3[1] = (($char_array_4[1] & 0xf) << 4) + (($char_array_4[2] & 0x3c) >> 2);$char_array_3[2] = (($char_array_4[2] & 0x3) << 6) + $char_array_4[3];for ($i = 0; $i < 3; $i++){$ret.=chr($char_array_3[$i]);}$i = 0;}}if($i){for ($j = $i; $j <4; $j++){$char_array_4[$j] = 0;}for ($j = 0; $j <4; $j++){$char_array_4[$j] = strpos($base64_chars,$char_array_4[$j]);}$char_array_3[0] = ($char_array_4[0] << 2) + (($char_array_4[1] & 0x30) >> 4);$char_array_3[1] = (($char_array_4[1] & 0xf) << 4) + (($char_array_4[2] & 0x3c) >> 2);$char_array_3[2] = (($char_array_4[2] & 0x3) << 6) + $char_array_4[3];for ($j = 0; ($j < $i - 1); $j++) {$ret.=chr($char_array_3[$j]); }}$ret1=decode($ret);return $ret1;} function decode($text){define('UTF32_BIG_ENDIAN_BOM', chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));define('UTF16_BIG_ENDIAN_BOM', chr(0xFE) . chr(0xFF));define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));define('UTF8_BOM', chr(0xEF) . chr(0xBB) . chr(0xBF));$first2 = substr($text, 0, 2);$first3 = substr($text, 0, 3);$first4 = substr($text, 0, 3);$encodType = "";if ($first3 == UTF8_BOM)$encodType = 'UTF-8 BOM';else if ($first4 == UTF32_BIG_ENDIAN_BOM)$encodType = 'UTF-32BE';else if ($first4 == UTF32_LITTLE_ENDIAN_BOM)$encodType = 'UTF-32LE';else if ($first2 == UTF16_BIG_ENDIAN_BOM)$encodType = 'UTF-16BE';else if ($first2 == UTF16_LITTLE_ENDIAN_BOM)$encodType = 'UTF-16LE';//下面的判断主要还是判断ANSI编码的·if ($encodType == '') {//即默认创建的txt文本-ANSI编码的$content = iconv("GBK", "UTF-8", $text);} else if ($encodType == 'UTF-8 BOM') {//本来就是UTF-8不用转换$content = $text;} else {//其他的格式都转化为UTF-8就可以了$content = iconv($encodType, "UTF-8", $text);}return $content;} ?>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。