本文转载自 编程技术宇宙,作者 菜饼

咳咳,人生的三大错觉之一

就是她喜欢我

为了解开粉丝的疑惑,让他面对现实。今天我就来给大家揭秘,乱码背后那些不为人知的事!

首先,我们要意识到『乱码』

本质上是编码与解码的方式不一致

举个例子,当用拼音的方式来解读英文

事实上,Excel 对中文的解析编码默认是 GBK

所以,当有人把 UTF-8 编码的 Excel 文件发给你

Excel 默认会用 GBK 去解析

双击打开,出现一大坨乱码,其实是很正常滴

才不是有什么隐含信息呢

那么遇到这种问题该怎么解决呢?

知道了乱码产生的原理是

读取的编码方式与写入时不一致

那么解决办法就很简单了——(把读取的编码方式改为 UTF-8)

因为 Numbers 默认是 UTF-8

所以不会显示乱码

什么?你说就这?

作为程序员

当然还有更装逼的办法

当然还有更加极客的办法

(把文件转为 GBK)

iconv -f UTF-8 -t GB18030 test.csv > test2.csv

轻松搞定!

既然讲到这了,那就再讲讲 UTF-8 到底是个什么东东

首先,我们都知道,计算机起源于美国

他们用二进制来存储数据

每一个 0 或 1 称为一位

而八位就组成了一个字节

每一位能标识两种状态

每个字节则能标识 2^8 = 256 种状态

那么这些状态有啥用呢?

美国人把 0 - 127 这 128 个状态

都映射到各种字符上

包括大小写英文字母、标点符号、数字

这就是常说的 ASCII 字符集

后来,随着其他国家开始使用计算机

ASCII 里没有他们的字母,他们便利用起剩下的 128 - 255 位,这被称为 ASCII 拓展字符集

然而,事情并没有这么简单

等到中国人开始使用计算机时,已经没有多余的位置了

咋办呢?

智慧的中国人民,毫不客气地去掉了127 位之后的编码

用 2 个字节来编码一个汉字

这样一来,7000 多常用汉字的编码问题就解决了

这就是 GB2312 编码

它是对 ASCII 的中文拓展

但汉字实在太多了!GB2312 不够用了咋办呢

这个问题充钱(拓展)就能解决

这回拓展出了GBK,不仅包含 GB2312 所有内容,还包含了 20000 多个新的汉字(含繁体字)

再后来少数民族也要用电脑了,GBK 又拓展成了 GB18030

这一系列汉字编码标准被通称为DBCS

中国人的编码问题解决了

但日本、韩国各自的编码问题咋办呢?

他们也各自搞了一套自己的编码标准

结果就是

谁也不支持谁

兼容性问题眼看着愈来愈严重,这可咋办呢?

这时!Unicode 闪亮登场

Unicode 的制定就是为了将世界上所有的符号都纳入其中

每一个符号都给予一个独一无二的编码

如此一来就可以解决乱码问题

(虽然到现在并没有解决)

这就是字符集的发展过程

回到 UTF-8

它其实是 Unicode 字符集的一种编码方式

UTF-8 由肯·汤普逊罗勃 · 派克发明

其中,肯·汤普逊 是名副其实的大佬

听听,这是人话吗?!

知道了 UTF-8 的来历,那么 UTF-8 具体是怎么编码的呢?

UTF-8 作为一种可变长的编码方式

也就是说,不同的字符占用的字节数不同

2003年11月,UTF-8 被 RFC 3629 重新规范后,使用 1- 4个字节来进行编码。规则其实很简单:

来看几个例子

按照不同的编码方式

同一句话被编码后的 01 字符串不同

(正如我们前面所说的 UTF-8 和 GBK)

是不是很简单?

那天,妹子给我发来了一串乱码…相关推荐

  1. 为啥妹子给我发的 Excel 打开之后是乱码?

    咳咳 人生的三大错觉之一 就是她喜欢我 为了解开粉丝的疑惑 让他面对现实 今天我就来给大家揭秘 乱码背后那些不为人知的事 首先 我们要意识到 『乱码』 本质上是编码与解码的方式不一致 举个例子 当用拼 ...

  2. pc(电脑)用java通过adb操作android手机发短信及中文乱码解决

    最近想用java调用android手机的短信功能.已开始用一下方法实现: adb -s emulator-5554 shell am start -a android.intent.action.SE ...

  3. 技术泡妹子之SVG识别妹子身体各个部位

    妹子在空间发了一张图片,甚是惹人喜爱 妹子的眼睛,嘴唇,芊芊素手...... 随及想到用SVG来实现识别妹子的各个身体部位,再当鼠标移动到不同的部位的时候展示相应的话语 演示地址:http://www ...

  4. php发邮件有时很卡,phpmailer发邮件常见的问题及解决方法汇总

    phpmailer发邮件常见的问题及解决方法汇总 发布于 2014-11-22 14:50:36 | 808 次阅读 | 评论: 0 | 来源: 网友投递 PHPMailer 发送电子邮件的PHP函数 ...

  5. 网上收集的一些程序员笑话

    1.老婆给当程序员的老公打电话:下班顺路买十个包子,如果看到卖西瓜的,买一个.当晚老公手捧一个包子进了家门-老婆怒道:你怎么只买一个包子?!老公甚恐,喃喃道:因为我真看到卖西瓜的了." 2. ...

  6. 又一位!26岁当上985博导,读博期间也曾两次想要退学......

    关注"视学算法",一起学习一起冲鸭! 设为星标,第一时间获取更多干货 来源:电子科技大学.成电教师中心.电子科大基础与前沿研究院(ID:i_ff_s) 来自:计算机视觉联盟公众号 ...

  7. 26岁已经是“双一流”高校博导!读博期间也曾两次想要退学......

    来源|成电教师中心 四岁上小学,二十四岁博士毕业,刚满26岁的她,已经从"别人家的学生"成为"别人家的老师",正式成为"双一流"高校的博导. ...

  8. 又一位!26岁当上985博导,这才是乘风破浪的姐姐!

    这才是乘风破浪的姐姐! >>>> 94年10月出生,今年才26岁,已经成为985高校正高级研究员(等同教授).博导.殊不知,这么优秀的姐姐,也坦言称自己在读博期间多次有过退学的 ...

  9. 北大博士网恋被骗7400RMB,聊天记录惨遭曝光!

    这年头,网络骗子真的不少, 一博士在网恋的时候被骗了七千多块, 最后女方还编出车祸变植物人的狗血剧情, 然后最后两人还变成"朋友",交流诈骗过程, 剧情可以说是狗血曲折 闻着伤心听 ...

最新文章

  1. python下py2exe打包笔记
  2. redis安装+redis主从
  3. spring mvc dubbo ios android整合cms内容发布平台
  4. Silverlight调用的JS方法返回对象数组的处理方法
  5. legend3---2、网站的代码里面的/也是代表根目录
  6. python使用matplotlib画图,绘制三维、二维曲线。设置字体大小以及坐标系间距等
  7. 查看网络端口使用情况
  8. 为CodeLove编写插件——常用软件扫描(SoftwareToScan)
  9. 记个SwitchButton笔记
  10. BAT程序员手把手带你学算法-数组篇(理论知识剖析+5道经典面试题目)
  11. matlab 插值出错,MATLAB插值问题
  12. win10下装win7双系统_win10下怎么装win8系统 win10下装win8系统方法【详细教程】
  13. 2小时开发《点球射门游戏》,动画演示思路(上),代码已开源
  14. 【线性代数】分块矩阵的运算、特征值
  15. js 拖动图片移动位置插件jquery.dad.js
  16. 别找ERP试用版了,直接送你一个免费的
  17. 地理坐标系和投影坐标系
  18. linux双系统的启动,解决Linux双系统安装卡在启动LOGO
  19. 一大波好看的国产漫画来袭,在线动漫迷们做好准备了吗?
  20. Android手机fc模拟器,安卓fc模拟器

热门文章

  1. SaaS服务当前,赚快钱者请绕行
  2. java新建android_Android Studio项目的创建及Java基础知识
  3. 机器人工程→合适的课程←
  4. T568A 与 T568B
  5. node -v 不是内部或外部命令 也不是可运行的程序 或批处理文件。
  6. QML+cmake 下取消打印 QML debugging is enabled.Only use this in a safe environment.
  7. (三)MkDocs学习——配置主题
  8. 【答学员问】 考研还是就业:如何选择未来职业道路?
  9. B2c商城系统介绍源码
  10. 点击验证码刷新的实现