日志中出现乱码_合宙Luat | 乱码搞得一团糟?开源神器帮你轻松修复

65f94913f506e43c961e9709b57578fc.png

鎰熸仼鐩搁亣

缇庡ソ鐨勬椂鍏変笌澶у鐩镐即

2021锛屾柊骞村揩涔愶紒

相信大家在日常生活中,都见过类似上面的字符串。这些看起来不明所以的内容,通常被称作乱码。

那么乱码是如何产生的,并且如何修复呢?我们接下来将一步步讲解。

1

你须知道的编码规则


字符串,本质上都是一个字节一个字节的数据,连在一起存储的。而要将这些数据显示在屏幕上,则需要按一种编码规则进行解析。

ASCII编码


ASCII编码是最容易理解的。ASCII编码因为每个字符仅占用7bit,所以最多只能存储127个字符,而每个字符都有唯一的一个数字与其对应。

例如:

  • 数字0x35在这种编码规则下,会被解析为字符5;

  • 数字0x6C在这种编码规则下,会被解析为字符l ;

  • 数字0x4C在这种编码规则下,会被解析为字符L;

具体对应规则,可以在网上搜索ASCII 码表查看。

按照这种规则,一串hello,用16进制数据表示就是:

68 65 6C 6C 6F

GB2312编码


因为ASCII只能显示127个字符,远远不能满足中文字符的显示需求,所以中国国家标准总局于1980年发布了国家标准代码GB2312标准(目前最新标准为GB18030)。

简单来说,在这套编码规范下,每个中文字符可以由2个字节表示,例如:

  • 啊 的实际数据为0xB0 0xA1 ;

  • 测 的实际数据为0xB2 0xE2 ;

  • 试 的实际数据为0xCA 0xD4 。

同时,因为ASCII编码下每字节使用了7bit(0x00-0x7f ),GB2312为了对其进行兼容,规定每个中文字符的高位字节(第一个字节)使用0xA1–0xF7的范围,避开了ASCII编码使用的区域。

也就是说,象下面的一串混用了中英文的数据,也可以正常被解析并显示出来:

B2 E2 CA D4 31 32 33 B2 E2 CA D4

实际内容:

B2 E2(测) CA D4(试) 31(1) 32(2) 33(3) B2 E2(测) CA D4(试)

UTF-8编码


UTF-8可以使用1-4字节来表示字符,因为其兼容性强,可以对Unicode字符集中的所有有效编码点进行编码,是目前使用最广泛的编码标准。

与GB2312一样,UTF-8同样兼容ASCII编码。只是UTF-8比GB2312包含了更多字符,并且每种字符的字节数并不是完全固定的。

由于编码规则比较复杂,这里不作具体解释,仅举例说明:

  • 啊 的实际数据为0xE5 0x95 0x8A;

  • 测 的实际数据为0xE6 0xB5 0x8B;

  • 试 的实际数据为0xE8 0xAF 0x95。

其他编码


除了ASCII、GB2312和UTF-8编码,还有许多编码标准,他们大部分互不兼容。

2

存储和传输字符串数据


129a8eaac389b40e36a8cb4e64fec666.png

数据都是要进行存储和传输的,与编码息息相关。

  • 存储

微软使用BOM头这种技术来为纯文本文件标记其编码,这样打开文件时就可以用正确的编码进行解析。

而大部分Linux不使用类似技术,所以读取后只能靠猜测,或强行指定,来进行显示。

  • 传输

传输不仅指字符串数据在互联网上的传输,也包括了在各类函数调用过程中的传输。这类操作通常都不会带有字符编码标准的标记,一般靠直接指定编码来解决。

3

为何会产生乱码


聪明的你应该已经想到了,如果一串某编码的数据,被人使用另一种编码标准进行解析,那么得出的结果几乎一定是错误的。

比如测试解析结果这几个字,我们使用UTF-8编码,得到下面16进制数据:

E6B58BE8AF95E8A7A3E69E90E7BB93E69E9C

如果,收到这些数据的人尝试使用GB2312编码来显示,那么结果就是我们非常熟悉的乱码了:

娴嬭瘯瑙f瀽缁撴灉

上面的过程就是典型的乱码形成过程。

4

如何修复乱码


乱码是否可以还原?答案是肯定的,只需要按乱码形成时的操作反过来做一遍就可以恢复了。但是有些编码中会出现?这种无法解析显示的数据,这部分数据就完全丢失了。

一般的乱码修复操作,就是把各种编码可能性都试一遍,看哪个结果可靠,那么就是原始内容。

这里推荐使用开源工具—— LLCOM (llcom.papapoi.com),来进行乱码恢复工作。

LLCOM

可运行Lua脚本的高自由度串口调试工具。

  • 可独立运行Lua脚本,并拥有定时器与协程任务特性(移植自合宙Luat Task架构);
  • 其他串口调试功能具有的功能;
  • 收发日志清晰明了,同时显示HEX值与实际字符串;
  • 自动保存串口与Lua脚本日志,并附带时间;
  • 串口断开后,如果再次连接,会自动重连;
  • 发送的数据可被用户自定义的Lua脚本提前处理;
  • 右侧快捷发送栏,快捷发送条目数量不限制。

更多精彩,敬请期待!

005ff621b7004716970022617d0a6e4a.gif

我们用上一节生成的乱码数据作为例子,尝试修复:

c40fc2467798a25bcbb7ef3d09a4c2b9.pngf2b3aa99ee83428ac0dd144ff41755d5.png

可以看到可靠的结果已经显示出来,修复成功。

5

如何避免乱码


建议在写代码时统一使用UTF-8编码,这是目前互联网的最主要的编码形式。

如果是资源占用紧张,但依旧需要中文显示的地方,可以考虑使用GB2312编码存储数据。

了解合宙Luat开源架构:


Luat = Lua + AT,合宙推出的物联网创新开源架构,依托于通信模块做简易快捷的开发,将传统的AT命令用Lua语言封装成API,并提供各种功能应用的demo,大大减少用户的开发成本。

Luat入门教程

http://doc.openluat.com/wiki/3?wiki_page_id=606

  • 开发指南

  • 白话Lua教程

  • 简明Lua语法

  • LuaTools

  • 第一个工程

  • Luat框架

  • Luat API接口 (2G)

  • Luat API接口 (4G)

  • LuaTask 库消息和注解

  • Luat云平台

13d84e551db44a0021a08ae37bc05a93.gif

今天就分享到这里,你学会了吗

本文将持续在Luat社区更新

8c9e07841c4c5656af7544eefd7974c2.png

http://doc.openluat.com/article/2113/0

- 欢迎加入Luat 社区 -

社区账户与ERP系统通用

Lua教程 | 模块资料 | 问答系统 | 工具下载 | 经验分享

4db34912ec9cd80f2c121fd1abac9fa5.gif快来领取专属福利~

0ba5b78ab916e2892b5dc8a71cd8e7a6.png

方式一:留言互动

参与微信公众号合宙Luat的最新推文留言互动,最先留言的前五位朋友可获赠五折券一张;

方式二:好友助力

关注合宙Luat公众号并后台留言:五折券,获取助力码后每邀请五位好友成功助力,即可获得五折券一张,多分享多获赠。

合宙商城五折券使用说明:

由合宙Luat公众号菜单【合宙商城】进入,商城全场除团购、限量特价外均可使用。每个订单结算限使用一张,每张券最多可购买相同或不同产品共计3个,不与其他优惠活动叠加。


- 合宙Cat.1技术QQ群 -

合宙Luat (Cat.1模块) 1群:1092305811

合宙Luat (Cat.1模块) 2群:8771645550

每个建议都值得关注

每个技能都值得分享

更多精彩等你来参与

85928ef352cc9ab2f20c7e643db83d46.gif

千人级专业人士技术交流群,

模组开发、行业应用、知识分享包罗万象,

谈笑间轻松获取最前沿最实用的物联网资讯!

9cb5d9428ddd14e9a281947eb72dba01.png

13d84e551db44a0021a08ae37bc05a93.gif

- 合宙Cat.1生态应用案例 -


18700e01c593c80bbbecab1000a11a97.gif

9c7cc48aa14459c104c0dcaaa476b5ce.png

柏来Cat.1智能充电插座

f0909dde3eaa231987d301ff7afa876f.png

大彩科技医用级4G串口屏

cdc900ce044d42a7f4ca875658ff996e.png

研色智能LED背包/车载互动屏

c29f4aa1400e193a0b8a4f0672cfdbfe.png

速锐得车联网4G版T-BOX

154d2dd59f86de612605b655877a3ad4.png

米老师Cat.1电话核心板

7dd8058e4fe7df37f7d8cfc54820ffac.png

世纪华宁Cat.1路由器&DTU

c12f1c23435ba6cd20451a15356f2196.png

蜜连科技Cat.1智能口罩售卖机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QQ浏览器如何修改截屏快捷键?QQ浏览器修改截屏快捷键的方法

qq浏览器是一款非常好用的搜索服务软件,在日常生活中如果碰到有什么不懂的内容,都可以使用这款软件解决,使用非常的方便,随时都可以满足用户的搜索需求,用户在使用这款软件的时候可以使用到非常多的功能,随…

轮播高度_Qt编写自定义控件24-图片轮播控件

一、前言上一篇文章写的广告轮播控件,采用的传统widget堆积设置样式表做的,这次必须要用到更高级的QPainter来绘制了,这个才是最高效的办法,本控件参考雨田哥的轮播控件,经过大规模的改造而成,相比于原来的…

怎样更换UC浏览器的字体?更换UC浏览器的字体的方法

uc浏览器是一个非常好用的搜索服务软件,需要使用浏览器的用户可以使用手机在这里操作,用户在使用一个软件的时候,可以将这个浏览器设置成自己喜欢的字体,这样使用起来就会更加的方便,在阅读的时候,使用顺眼…

自定义按键_王者荣耀:自定义按键让你的百里守约百发百中

在王者荣耀中,有很多输出炸裂的射手,但是他们普遍手不够长!但是其中就有一位,他不仅手很长,而且打得还很疼!他就是刺客兼射手的——百里守约百里守约,他不是射手,是刺客!…

手机QQ浏览器如何同时下载多个文件

qq浏览器是一个非常多用户都喜欢使用的搜索软件,这款软件可以为用户提供非常多便捷的搜索服务,在使用这款软件的时候,很多用户会使用这款软件下载自己需要的文件,那么在使用这款软件的时候,要如何同时下载多个文件进行…

生成特征_使用gplearn自定义特征自动生成模块

背景:数据科学领域中,数据一直都是主要驱动力,特征工程作为其中重要一环,成为无论是kaggle类的数据竞赛,还是工业界应用中关注的重点。特征工程中有重要的一个环节叫做特征融合,好的特征融合能帮助构造当前…

腾讯视频电脑版下载_怎么样下载腾讯视频

软件是否好用,还得大家下载腾讯视频安装才知道。本文分享腾讯视频电脑版下载_怎么样下载腾讯视频。腾讯视频播放器不管是在界面设计、还是在功能操作使用、启动播放速度、视频内容数量、画面品质等方面均得到了用户的高度认可,是目前用户量最大的播放器软…

python数字对应车站_python爬虫查询车站信息

#车站信息查询import requests#1.获得url(存取车站信息的url)并读取,根据获得信息的特点去掉无用的信息并转换存储到列表中url"https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version1.9090"txtrequests.get(url).text#pri…

优酷视频如何进行连续播放?

优酷视频如何进行连续播放? 您可按下列方式打开和关掉持续播发: 移动端:开启优酷app-左上方【设定】-开启或关掉【持续播发】按键就可以。 pc端:开启优酷pc客户端-点一下左上方【设定】-启用或不启用【自始至终持续播发】就可以…

yaw公式_坐标系和yaw, pitch, roll等基础概念

坐标系右手坐标系:把右手拇指食指中指伸直并正交,拇指X,食指Y,中指Z。一般无特殊说明,都是右手坐标系。右手坐标系的旋转正方向:从轴的正方向看向原点,逆时针方向即是旋转正向。或者&#xff0c…

腾讯视频下载的视频怎么剪辑_怎样卸载腾讯视频

腾讯视频影音是一款界面轻松友好,功能全面完善,方便好用,绿色安全,完全免费的、专注视频播放的客户端软件,您可运行腾讯视频影音,在线享受腾讯视频网站内全部免费高清正版视频。腾讯视频可以在线享受丰富多…

迈普路由器访问控制列表配置命令_如何选购企业路由器?选购企业路由器需注意什么...

3、企业自身的需求选择路由器时,首先考虑的是企业自身的需求,主要表现在下面9个原则:实用性原则。采用成熟的、经实践证明其实用性的技术。这能满足现行业务的管理,又能适应3~5年内业务发展的要求。可靠性原则。设计详细的故障处理…

腾讯视频网页下载_腾讯视频怎么下载视频

本文给大家整理了腾讯视频网页下载_腾讯视频怎么下载视频方面的内容。腾讯视频独播剧质量还是可以的,比较给力的是腾讯视频大量买入了老剧的版权,不乏一些比较经典的港剧,还把这些老剧修复了。腾讯视频播放器是一款支持多种音视频格式的主流播…

bazel 链接_bazel-链接第三方动态库,静态库。

demo4示例 链接第三方动态库,静态库。使用cc_import链接外部库。原理是通过cc_import规则导入第三方库,然后cc_binary再依赖cc_import规则的target,也即依赖第三方库。demo4目录树├── link│ ├── BUILD│ ├── include│…

腾讯视频下载后为什么还需联网看_腾讯视频如何下载离线视频

今天播放器家园网分享一下腾讯视频下载后为什么还需联网看_腾讯视频如何下载离线视频,希望可以帮助大家。腾讯视频有很多小功能是其他播放器没有的,大家可以下载后慢慢探索一下,小编非常喜欢的一个功能就是看电视剧的时候可以选择只看某个演员…

2台服务器负载均衡后synchronized_一篇有趣的负载均衡算法实现

负载平衡(Load balancing)是一种在多个计算机(网络、CPU、磁盘)之间均匀分配资源,以提高资源利用的技术。使用负载均衡可以最大化服务吞吐量,可能最小化响应时间,同时由于使用负载均衡时,会使用多个服务器节点代单点服务&#xff…

腾讯视频下载安装免费装到手机_腾讯视频怎么上传个人本地视频

不管这个腾讯视频好用与否,都有一大批用户,本文播放器家园网小编分享腾讯视频下载安装免费装到手机_腾讯视频怎么上传个人本地视频。VIP会员频道聚合海量VIP品质内容,连续签到解锁惊喜奖励、摇一摇抽VIP天卡、领取会员专属权益,快…

php mysql 中文_PHP连接MySQL查询结果中文显示乱码解决方法

我们首先假设数据库中采用的编码为UTF-8这时我们在PHP页面中应当首先添加此处charset的值utf-8必须与文件保存时的编码类型一样之后在数据库查询前添加mysql_query("set names utf8");该行语句的编码值也应当与上面的编码值一样。总而言之,网页保存的编码…

怎样将腾讯视频下载到的电影传入手机_腾讯视频怎么缓存视频

不管这个腾讯视频好用与否,都有一大批用户,本文播放器家园网小编分享怎样将腾讯视频下载到的电影传入手机_腾讯视频怎么缓存视频。腾讯视频拥有独立的播放界面,软件采用独立的播放界面进行播放,用户点击喜欢的影视播放之后不会干扰…

腾讯视频主演角色弹幕怎么发

本文播放器家园网小编给大家分享“腾讯视频主演角色弹幕怎么发”。只需要打开腾讯视频,就可以在线享受腾讯视频网站内全部免费高清正版视频、最新影视大片、最独家的综艺、旅游、纪录片,在众多的播放器当中,腾讯视频堪称完美。腾讯视频可以在…