1.什么是base64编码

由于一些网络通讯协议的限制,你必须使用 window.btoa() 方法对原数据进行编码后,才能进行发送。接收方使用相当于 window.atob() 的方法对接受到的 base64 数据进行解码,得到原数据。

例如,发送某些含有 ASCII 码表中 0 到 31 之间的控制字符的数据。

然而,window.btoa 与 window.atob 不支持中文,对于 unicode 编码的字符进行 base64 编码之后,通过浏览器原生的 btoa 方法界面中文会乱码。

2.JS中的base64的中文乱码解决方法

首先引入两个方法:utf16to8、utf8to16

function utf16to8(str) {var out, i, len, c;out = "";len = str.length;for(i = 0; i < len; i++) {c = str.charCodeAt(i);if ((c >= 0x0001) && (c <= 0x007F)) {out += str.charAt(i);} else if (c > 0x07FF) {out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));} else {out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));}}return out;}function utf8to16(str) {var out, i, len, c;var char2, char3;out = "";len = str.length;i = 0;while(i < len) {c = str.charCodeAt(i++);switch(c >> 4) {case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:// 0xxxxxxxout += str.charAt(i-1);break;case 12: case 13:// 110x xxxx   10xx xxxxchar2 = str.charCodeAt(i++);out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));break;case 14:// 1110 xxxx  10xx xxxx  10xx xxxxchar2 = str.charCodeAt(i++);char3 = str.charCodeAt(i++);out += String.fromCharCode(((c & 0x0F) << 12) |((char2 & 0x3F) << 6) |((char3 & 0x3F) << 0));break;}}return out;}
编码
var original = "hello world" ;
var cipher = utf8to16(atob(original)) ;
解码
var original = btoa(utf16to8(cipher)) ;

3.JAVA中的中文乱码解决方法

编码
String original = "hello world" ;
String cipher = new String(Base64.encode(original .getBytes(StringUtil.__UTF8))) ;
解码
String original = new String(Base64.decode(cipher .getBytes()), StringUtil.__UTF8) ;

Base64中文乱码解决方法相关推荐

  1. java ios乱码_iOS发送邮件及其中文乱码解决方法

    引 要我说呀,你如果不曾碰到奇奇怪怪的需求都不好意思说你是个程序猿.最近我碰到了,所以才有这篇文章,记录一下过程中遇到的问题. 这篇文章是记录一下我是如何在iOS端实现自动发送邮件功能的.某个应用场景 ...

  2. vs code中文乱码解决方法

    修改 1.(安装方法) 2.显示终端输入数据输出结果(完美解决) 3.修改部分:中文乱码解决方法 第一步: 第二步: 1.(安装方法) 转载于: https:blog.csdn.net/qq_4304 ...

  3. Ubuntu10.04下gFtp2.0.19 远程客户端中文乱码解决方法

    Ubuntu10.04下gFtp2.0.19 远程客户端中文乱码解决方法如下: 1.打开"gFTP-FTP-属性-常规-远程字符集": 2.将远程字符集设置为:gb2312,gbk ...

  4. python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色)

    python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色) 参考文章: (1)python cmd 窗口 中文乱码 解决方法 (附:打印不同颜色) (2)https://www.cnblog ...

  5. Sublime Text 3中文乱码解决方法以及安装包管理器方法

    Sublime Text 3中文乱码解决方法以及安装包管理器方法 参考文章: (1)Sublime Text 3中文乱码解决方法以及安装包管理器方法 (2)https://www.cnblogs.co ...

  6. axios请求GBK页面中文乱码解决方法

    axios请求GBK页面中文乱码解决方法 参考文章: (1)axios请求GBK页面中文乱码解决方法 (2)https://www.cnblogs.com/bjhl/articles/10514038 ...

  7. charles抓包工具的中文乱码解决方法

    charles抓包工具的中文乱码解决方法 参考文章: (1)charles抓包工具的中文乱码解决方法 (2)https://www.cnblogs.com/grimm/p/7494688.html 备 ...

  8. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍 参考文章: (1)jquery的ajax()函数传值中文乱码解决方法介绍 (2)https://www.cnblogs.com/xuxiaosh ...

  9. python打包出现乱码_python解压zip包中文乱码解决方法

    乱码得原因: 由于ZipFile模块导出遇到中文解码不对,windows上会出现,linux是否会出现不知道没测试过. 解决方式: 1. 搞个文件名引射表(不太方便,少量文件夹套用时候还可以) 2. ...

最新文章

  1. php 手机唯一标示_Php获取移动设备唯一标识
  2. sybase 事务插入时不可查询_InnoDB事务与锁
  3. CURL HTTPS POST
  4. Spring Boot 2.0 正式发布
  5. 队列处理高并发_高并发场景下缓存处理的一些思路
  6. git安装 perl ubuntu_ubuntu下安装git
  7. mybatis 级联查询兑现_MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)...
  8. fitnesse - 安装部署
  9. ddbs mysql_ddbs简介
  10. 180112 打字效果
  11. RabbitMQ的六种工作模式(三)
  12. android 歌词同步 换行,AS3歌词同步详解
  13. 【Java基础知识 8】String、StringBuilder、StringBuffer详解
  14. Telco Customer Churn(电信客户流失相关数据集)
  15. 凡科服务器物理位置,建设网站教程
  16. 爬取京东收件地址下得所有数据
  17. WLC5508 HA ( AP SSO)
  18. PayPal信用卡付款401,商家不接受使用此付款类型
  19. VB 变量的声明及作用域
  20. [SQL]行转列和列转行

热门文章

  1. Direct3D11学习经历分享
  2. 我的微信公众号开通了
  3. Python 列表推导式的实用小技巧
  4. 【Unity】基础游戏单位GameObject中常用的属性和API
  5. 网站微信扫码支付流程
  6. 2019年西安市民办小升初西工大附中分校面谈录取学生名单
  7. Python实现微博热搜推送
  8. 游戏角色/3D电影逼真写实角色是如何制作出来的?
  9. 编写KNN算法预测泰坦尼克号存活率
  10. ESP8266 Ticker学习