编程初学者如何解决字符编码和乱码问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2501个文字,预计阅读时间需要11分钟。
为什么服务器收到的请求或打开的文本文件有时会出现乱码?因为编码不对。编码的本质是什么?为什么编码不对就会乱码?一段文本是如何在网络中传输的?
——“为什么服务器收到的请求或者打开的文本文件有时会乱码?”
——“因为编码不对。”
——“编码的本质是什么?为什么编码不对就会乱码?一段文本是如何在网络中传输后最终显示给用户的?Java String默认使用什么编码?”
——“……”
乱码问题相信很多同学都有幸遇到过的,也解决过,但根据个人面试的经验,对该问题知其然亦知其所以然的同学,是少之又少的。故在这里做一下分享,以备在其他的面试中被问到:-)。
因为计算机已经发明很久了,“不要重复发明轮子”也是一句大家耳熟能详的古训,我们已经习惯了编写Print("A"),就会在屏幕上显示一个字符A的便利,认为这一切自然而然。而过程中需要哪些支持,发生了什么,思考的人已经越来越少了。下面我们推理下在轮子还不那么齐全的年代,如何实现一个显示字符的“记事本”程序。
一、文本的存储
.txt文件非常常见,当我们在windows桌面右键新建一个“文本文档”,在其中输入A之后保存,就在桌面形成了一个保存着A的文本文档A。然后我们双击它打开,就会看到这个保存的A。
而学校里的课程告诉我们,计算机中存储的都是0和1这种2进制数据,无法存储“A”,那磁盘存储的究竟是什么?我们换另外一类工具来打开这个文本文档,这类工具叫做16进制编辑器,这里使用HxD编辑器。显示如下内容。
这里显示了实际的存储内容为一个字节0x41,对应的文本是A。 这时我们在41这个字节之后输入一个字节0x42,这时对应的文本显示了B
保存后用记事本打开这个存储了两个字节的文件,同样会显示AB,即我们通过输入0x42的方式,输入了字符B。
本文共计2501个文字,预计阅读时间需要11分钟。
为什么服务器收到的请求或打开的文本文件有时会出现乱码?因为编码不对。编码的本质是什么?为什么编码不对就会乱码?一段文本是如何在网络中传输的?
——“为什么服务器收到的请求或者打开的文本文件有时会乱码?”
——“因为编码不对。”
——“编码的本质是什么?为什么编码不对就会乱码?一段文本是如何在网络中传输后最终显示给用户的?Java String默认使用什么编码?”
——“……”
乱码问题相信很多同学都有幸遇到过的,也解决过,但根据个人面试的经验,对该问题知其然亦知其所以然的同学,是少之又少的。故在这里做一下分享,以备在其他的面试中被问到:-)。
因为计算机已经发明很久了,“不要重复发明轮子”也是一句大家耳熟能详的古训,我们已经习惯了编写Print("A"),就会在屏幕上显示一个字符A的便利,认为这一切自然而然。而过程中需要哪些支持,发生了什么,思考的人已经越来越少了。下面我们推理下在轮子还不那么齐全的年代,如何实现一个显示字符的“记事本”程序。
一、文本的存储
.txt文件非常常见,当我们在windows桌面右键新建一个“文本文档”,在其中输入A之后保存,就在桌面形成了一个保存着A的文本文档A。然后我们双击它打开,就会看到这个保存的A。
而学校里的课程告诉我们,计算机中存储的都是0和1这种2进制数据,无法存储“A”,那磁盘存储的究竟是什么?我们换另外一类工具来打开这个文本文档,这类工具叫做16进制编辑器,这里使用HxD编辑器。显示如下内容。
这里显示了实际的存储内容为一个字节0x41,对应的文本是A。 这时我们在41这个字节之后输入一个字节0x42,这时对应的文本显示了B
保存后用记事本打开这个存储了两个字节的文件,同样会显示AB,即我们通过输入0x42的方式,输入了字符B。

