一段看不懂的乱码字符_字符乱码的解读
发布日期:2022-02-04 01:44:00 浏览次数:18 分类:技术文章

本文共 1324 字,大约阅读时间需要 4 分钟。

aa23a296500a3eef35fbe63551c9456f.png

计算机用二进制编码来表示字符。二进制编码的类型不只有一种,常用的有 UTF-8、GB2312、GB18030、Windows 1252 等等。不同的编码类型采用不同的编码格式,很多编码类型是不兼容的。同一段二进制编码数据,如果使用错误的编码类型读取时,就可能显示成错误的字符,这也就是乱码的根源。

字符读取

字符读取是采用指定的编码类型将二进制编码数据读取为字符。比如二进制数据“C3 8C C3 86”,使用 UTF-8 编码类型读取时表示为字符“唐”。

字符读取是只读的,不会改变原本的二进制数据。

简单的乱码

仅仅只是读取数据时采用了错误的编码类型,是一种最简单的情况。这种情况只要切换到正确的编码类型后再进行读取就可以了。

我们常见的乱码会比较复杂,通常是使用错误的编码类型读取数据后,又进行了编码转换。

编码转换

编码转换是使用不同的编码类型来表示相同的字符。比如“唐”的 UTF-8 编码是“E5 94 90”,转换为 GB18030 编码后变为“CC C6”,但是仍然表示“唐”。

复杂情况的分析

下面举个例子描述比较复杂的情况:

  1. 一个 GB18030 编码的字符“唐”的二进制数据是“CC C6”;
  2. 使用 Windows 1252 编码类型来读取时,显示的字符不是“唐”,是“ÌÆ”;
  3. 将“ÌÆ”转换成 UTF-8 编码,二进制数据变成了“C3 8C C3 86”。

这个时候,我们再使用任何编码类型都无法正确读出“唐”这个字符。因为数据本身已经错了,怎么读也不可能得到原本的信息。换句话说,“C3 8C C3 86”这个二进制数据在任何编码类型中都对应不上“唐”这个字符。

产生这种乱码情况的简化过程如下:

【GB18030:唐( CC C6)】 —读取为–> 【Windws 1252:ÌÆ(CC C6)】 —转换为–> 【UTF-8:ÌÆ(C3 8C C3 86)】

解决方案是倒推回去,如下:

【UTF-8:ÌÆ(C3 8C C3 86)】—转换为–> 【Windws 1252:ÌÆ(CC C6)】 —读取为–> 【GB18030:唐( CC C6)】

如果还是要使用 UTF-8 编码显示,则如下:

【UTF-8:ÌÆ(C3 8C C3 86)】—转换为–> 【Windws 1252:ÌÆ(CC C6)】 —读取为–> 【GB18030:唐( CC C6)】 —转换为–> 【UTF-8:唐( E5 94 90)】

UltraEdit 编辑器的使用

可使用 UltraEdit 编辑器来查看不同编码下的字符显示,也可以查看字符的二进制数据和进行编码转换。

1、使用不同编码类型来查看

在底部的状态栏可以切换不同编码类型来显示文本。

89f1831e4163907bedd13ca953199a76.png

注意:Windws 1252 在 ANSI 分类中,名称为“1252(ANSI拉丁语 I)”

2、查看二进制数据

文档右键菜单中有个“十六进制编辑”,可以查看十六进制数据,快捷键是“CTRL+H”。

93dc54d289a6914fc2820ac7d8f8fe85.png

注意:在计算机中,二进制数据通常使用十六进制来表示。

3、编码转换

通过菜单“文件 > 转换”来进行编码转换。

注意:Windws 1252 也属于 ASCII 编码,切换选择时要注意。

转载地址:https://blog.csdn.net/weixin_39603908/article/details/110815571 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:修改 font的文本信息_C#窗体,文本框如何实现类似html的输入提示信息
下一篇:chrome网页自动化插件_Automation | 让网页在 Safari 和 Chrome 之间穿梭

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年03月30日 01时03分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Excel表格身份证号显示不完整问题 2019-04-26
今日份实操——(HTML+CSS)浮动布局练习 2019-04-26
ESLint Parsing error: control-character-in-input-stream vue/no-parsing-error 2019-04-26
nginx: [emerg] duplicate location “/“ in /usr/local/etc/nginx/nginx.conf:142 2019-04-26
PHP - Laravel 视图模板(blade.php) 模板继承(@extends、@yield、@section) 2019-04-26
PHP - Laravel 表单验证(验证规则与使用 $this->validate()、Validator::make()、Requests) 2019-04-26
Java 数组(Array)与集合(List、ArrayList ...)的区别 2019-04-26
Java 集合(ArrayList)使用(增删改查) 2019-04-26
Java 继承(extends)使用 2019-04-26
Java 包(package)编译执行过程(简单分析) 2019-04-26
Java 权限修饰符(private、protected、public、默认、final、static) 2019-04-26
Java 接口协议(interface) 2019-04-26
Java 内部类(成员、局部、匿名) 2019-04-26
Nuxt.js 分页获取数据(及更新子组件数据、不刷新页面,异步请求追加数据) 2019-04-26
CPU100%问题如何快速定位?最耗CPU进程,最耗CPU线程,定位堆栈,定位代码 2019-04-26
2020年前端发展趋势分析,前端工程师必看 2019-04-26
程序员接私活,如何防止做完了不给钱?如何防止需求变更? 2019-04-26
Java实现字符串相似度算法,用于试题相似度,字符串相似度,字符串比较等场景 2019-04-26
2011年下半年信息系统项目管理师上午试卷试题及参考答案,考试真题 2019-04-26
2011年下半年信息系统项目管理师考试下午案例分析试题及参考答案,考试真题 2019-04-26