写代码时遇到了乱码 “锟斤拷”,我有点懵

大家好,我是鸭鸭!

此答案节选自鸭鸭最近弄的 面试鸭小程序,更多大厂常问面试题,可以点击下面的小程序进行阅读哈!

“锟斤拷锟斤拷锟斤拷锟叫癸拷锟斤拷”,是不是似曾相识?很多人在编程的时候,都会遇到乱码问题。

甚至你拿上面这些乱码在网上搜,都能找到对应错误的网页:

那为什么会这样呢?

先了解下什么是编解码:

  • 编码:将字符按照一定的格式转换成字节流的过程。
  • 解码:就是将字节流解析成字符。

用专业的术语来说,乱码是因为编解码时使用的字符集不一致导致的。比如你将字符利用 UTF-8 编码后,传输给别人,然后这个人用 GBK 来解码,那解出来的不就是乱码吗?

就好比加密算法和解密算法对不上,那解出来的是啥?不就是一堆乱七八糟的东西。

那为什么要需要编解码呢?

因为计算机底层的存储都是 0101,它可不认识什么字符。所以我们需要告诉计算机什么数字代表什么字符。

比如告诉它 0000 代表 面试,0001 代表 鸭 ,这样我输入 0000 0001 后,计算机就可以展示面试鸭三个字了。

这样的一套对应规则就是字符集,所以编解码用的字符集不同,就乱码了。其实就是类似一个翻译的过程,如果翻译成英文,我们按照中文的语法就再翻过来,不就乱了吗。

扩展:标准字符编码

ASCII 是美国国家标准协会 ANSI 就制定的一个标准规定了常用字符集的集合和对应的数字编号

从图可以看到,共 8 位,但是第一位都是 0,实际上就用了 7 位。可以看到完全就是美国标准,中文啥的完全没有。

所以我们中国制定了 GB2312 字符集,后续由发布了 GBK,基于 GB2312 增加了一些繁体字等字符,这里的 K 是扩展的意思。

扩展:Unicode

中国需要中国的字符编码,美国需要美国的,韩国还需要韩国的,所以每个国家都弄一个无法统一。

所以就指定了一个统一码 Unicode,又译作万国码、统一字符码、统一字符编码,是信息技术领域的业界标准,其整理、编码了世界上大部分的文字系统,使得电脑能以通用划一的字符集来处理和显示文字,不但减轻在不同编码系统间切换和转换的困扰,更提供了一种跨平台的乱码问题解决方案!

Unicode 和之前的编码不太一样,它将字符集和编码实现解耦了

来看下这张图就理解了:

最后

最后再推荐下鸭鸭目前努力在做面试小程序神器,已经有 3000 多道面试题目啦,欢迎大家来阅读!如果大家有不会的面试题,也可以在小程序内反馈!鸭鸭会第一时间为大家解答!

除了小程序版本,我们 web 端也上线啦:www.mianshiya.com

我是鸭鸭,我们下期见~

相关推荐

  • 70K!一个门槛极低的新方向!
  • DataOps+大模型促进数据工程创新
  • 高于临床测试3倍准确率!剑桥大学开发AI模型,提前6年预测阿尔茨海默症
  • 前谷歌科学家Yi Tay「LLM演义」系列博客第一弹:BERT为何匿迹江湖?
  • 斯坦福博士图解AlphaFold 3:超多细节+可视化还原ML工程师眼中的AF3
  • OpenAI掀小模型血战!苹果DCLM强势登场,碾压Mistral 7B全开源
  • ECCV 2024 | 让GPT-4图像理解更易出错,全新策略增强VLP模型对抗迁移性
  • ICML 2024 Oral | DPO是否比PPO更适合LLM,清华吴翼团队最新揭秘
  • 「后训练 + STaR」是 OpenAI 绝密项目「草莓」背后的秘密吗?
  • 在机器人顶会 RSS 2024 上,中国的人形机器人研究斩获最佳论文奖
  • 打破生态孤岛,国产异构原生AI算力工具问世,来自中科加禾
  • AI视频修复速度10倍提升,过曝变色也能逐帧搞定|美图国科大新算法
  • 给iPhone背面贴个AI录音机,生意老好了
  • 刚刚,中国IMO奥数憾失第一,五连冠统治被美国队终结
  • 数字人底层技术之6个语音合成代表项目:从GPT-SoVITS到Seed-TTS
  • Spring Boot集成starrocks快速入门Demo
  • Spring-Security 认证流程分析及多方式登录认证实践
  • NoteToMP(1.0.6)——Obsidian一键发公众号插件使用指南
  • 让 Kafka 支持队列功能:KIP-932和KMQ
  • 争夺“世界上最长的上下文窗口”背后:长上下文是否意味着 RAG 的终结?