mqtt 变为乱码 接受16进制字节流_常见乱码问题分析和总结

2023-11-16

20838b26-384b-eb11-8da9-e4434bdf6706.svg 21838b26-384b-eb11-8da9-e4434bdf6706.svg

背景概述

22838b26-384b-eb11-8da9-e4434bdf6706.svg 24838b26-384b-eb11-8da9-e4434bdf6706.svg 538311d6f83c7c6577fa971b5a5d84ec.png

在我们的日常工作生活中一定碰到过下面的情况:

场景1:安装完某个软件后,看到的安装程序变成类似这样的一组字符” µç×ÓË°Îñ¾ÖÖ¤ÊéÇý¶¯¼°·þÎñƽ̨”图1所示的样子;

图 1. 安装程序中的乱码

e360ffbb9f1b6d69961e3f5a4f04dd4d.png

场景2:打开一个文档发现里面的内容全面是问号??????如图2所示;

图 2. 带有问号的乱码

9561f85cd57817f9d9a4a747c4b6fd9f.png

场景3:打开某个网页,却显示成:如"бЇЯАзЪСЯ"、"�????????"?等等;

场景4:打开某个文档后,出现   。

上面例子中看到的就是困扰着我们的乱码。这篇文章基于项目实践,分别从普通用户和编程角度总结了常见的乱码种类,产生原因以及如何解决这些乱码问题。在分析乱码原因和解决办法之前,首先阐述一下和乱码相关的术语。

编码解码概述

我们都知道计算机不能直接存储字母,数字,图片,符号等,计算机能处理和工作的唯一单位是“比特位(bytes)”,一个比特位通常只有0和1,是(yes)和否(no),真(true)或者假(false)等等我们喜欢的称呼。利用比特位序列来代表字母,数字,图片,符号等,我们就需要一个存储规则,不同的比特序列代表不同的字符,这就是所谓的“编码”。反之,将存储在计算机中的比特位序列(或者叫二进制序列)解析显示出来成对应的字母,数字,图片和符号,称为"解码",如同密码学中的加密和解密,下面将详细解释编码解码过程中涉及到的一些术语:

字符集合(Character set):是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等,简单理解就是一个字库,与计算机以及编码无关。

字符编码集(Coded character set):是一组字符对应的编码(即数字),为字符集合中的每一个字符给予一个数字,如Unicode为每一个字符分配一个唯一的码点与之一一对应。

字符编码(Character Encoding):简单理解就是一个映射关系,将字符集对应的码点映射为一个个二进制序列,从而使得计算机可以存储和处理。常见的编码方式有ASCII编码、ISO-8859-1(不支持中文)、GBK、GB2312(中国编码,支持中文)、UTF-8等等,详情见表1。

字符集(Charset):包括编码字符集和字符编码,如ASCII字符集、ISO-8859-X、GB2312字符集(简中)、BIG5字符集(繁中)、GB18030字符集、Shift-JIS等,即下文中提到的字符集。

表1. 常见字符集和对应编码方式

字符集

编码

详解

ASCII

ASCII编码

ASCII字符集:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号。

ASCII编码:用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符;ASCII的最大缺点是只能解决了部份西欧语言的显示问题,但对更多其他语言依然无能为力。

ISO-8859-X

(常用的ISO-8859-1)

ISO-8859-1编码

ISO-8859-X 字符集:扩展的ASCII字符集,包括 ISO-8859-1 ~ ISO-8859-15,涵盖了大多数西欧语言字符和希腊语。

ISO-8859-1编码:用8位表示一个字符,总共能表示 256 个字符,但还是单字节编码,不能对双字节如中日韩等进行编码。

ISO-8859-2编码

ISO-8859-15编码

GBXXXX

GB2312编码

它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。

总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。对于人名、古汉语等方面出现的罕用字,GB2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

GBK编码

全称叫《汉字内码扩展规范》,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。

GB18030编码

GB18030-2005《信息技术中文编码字符

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mqtt 变为乱码 接受16进制字节流_常见乱码问题分析和总结 的相关文章

  • A - C语言实验——求一个3*3矩阵对角线元素之和

    Description 给定一个3 3的矩阵 请你求出对角线元素之和 Input 按照行优先顺序输入一个3 3矩阵 每个矩阵元素均为整数 Output 从左下角到右上角这条对角线上的元素之和 Sample Input 1 2 3 3 4 5
  • [MRCTF2020]千层套路1

    BUU题目复现 开局一个压缩包 flag全靠懵 拿到压缩包第一件事直接看能不能直接解压缩 很明显 有密码 不行 下一步 使用010Editor查看内部结构 发现确实操作着很多的 zip 文件 但是我使用binwalk foremost都没办
  • Python爬虫实战,requests模块,Python实现IMDB电影top数据可视化

    前言 利用Python爬取IMDB电影 废话不多说 让我们愉快地开始吧 开发工具 Python版本 3 6 4 相关模块 requests模块 random模块 bs4模块 以及一些Python自带的模块 环境搭建 安装Python并添加到
  • 凯恩帝对刀和刀补_KND数控车床试切对刀和调刀补

    展开全部 M 是测量的意思 有的系统是输32313133353236313431303231363533e78988e69d8331333262353363入你的测量值 然后点一个 测量 按钮 数控车对刀步骤 第一把刀的对刀步骤 第一步 确
  • linux 查询服务器的配置信息

    linux下看配置 可没有windows那么直观 你只能一个一个查看 一 cpu root srv more proc cpuinfo grep model name root srv grep model name proc cpuinf
  • 【Java数据结构】泛型详解+图文,通配符上界、下界

    0 泛型的本质 0 泛型的目的 1 泛型的语法 1 1 泛型的使用 2 包装类 2 1 装箱和拆箱 2 2 1练习题 3 泛型如何编译 4 泛型的上界 5 通配符 5 1通配符上界 5 2通配符下界 有坑填坑 0 泛型的本质 泛型的本质 泛
  • 【目标检测】25、Sparse R-CNN: End-to-End Object Detection with Learnable Proposals

    文章目录 一 背景 二 动机 三 方法 3 1 Backbone 3 2 Learnable proposal box 3 3 Learnable proposal feature 3 4 Dynamic instance interact
  • 【转载】Android Studio工程目录解析

    转载自CSDN网友HaiBing Android Studio工程目录结构分析 上 Android Studio工程目录结构分析 下 目录 Android Studio工程目录结构分析 上 Android Studio工程目录 app目录结
  • nltk_data无法下载或无法使用问题的解决方案之一

    nltk data无法下载或无法使用问题的解决方案汇总 报错展示 问题解决 本人使用的方法 1 手动下载 nltk data 数据压缩包 2 解压压缩包 找到packages文件夹 3 将packages文件夹中的文件全部复制到nltk d
  • 你是不是一个优秀的项目经理人(转)

    下面是项目管理之中最重要的一些技能被简化成的一些简单的小问题 你可以用它来测试你自己的水平 一 你没有很好地计划是因为你认为自己是一个执行者而不是计划者 很多人认为他们自己是行动型的 当他们被指派了一项任务时 他们的第一个反应就是着手开始解
  • 四、SpringBoot框架

    目录 什么是SpringBoot框架 SpringBoot的特点 作用 必会 简箱版tomcat 优缺点 面试 SpringBoot运行原理 开箱即用的全过程 SpringBoot是如何完成自动配置的 面试 SpringBoot启动项 St
  • C++面向对象------继承+多态

    概念 1 继承是从已有的类创建新类的过程 这使得创建和维护一个应用程序变得更容易 达到了重用代码功能和提高执行时间的效率 2 继承呈现了面向对象程序设计的层次结构 体现了从简单到复杂的认知过程 3 在c 类中 如果类b继承于类a 则类a叫做
  • uiautomator2常见的API操作

    click int x int y pressHome getCurrentActivityName pressMenu getCurrentPackageName takeScreenshot File storePath getDisp
  • 在typora中插入图片和视频

    在typora中插入图片和视频 sm ms图床 免费方案使用sm ms图床 这个东西很好用而且免费 使用方法可以参考 需要配置的点就是下面这一段 picBed uploader smms smms token 这里是你的smmstoken
  • 记录缓存知识

    所谓的缓存 就是将程序或系统经常du要调用的对象存在内存中 一遍其使用zhi时可以快速调用dao 不必再去创建新的重复的实例 这样做可以减少系统开销 提高系统效率 1 通过文件缓存 顾名思义文件缓存是指把数据存储在磁盘上 不管你是以XML格
  • 详解Linux系统中的软件管理及软件仓库

    目录 一 Linux中软件包的类型 二 软件包的名称结构 三 rpm命令管理软件包 四 本地软件仓库的搭建 五 dnf软件管理命令 总结 一 Linux中软件包的类型 DEB UEBlinux DEBlinux RPM redhat cen
  • Linux系统下对树莓派镜像进行烧写操作。可搭建自己的迷你服务器

    烧写后可以当做搭建自己的迷你服务器或者可携带的计算机哦 我以linux系统下对内存卡进行烧写镜像 烧写的先以snappy ubuntu care为例 网上的资料大多都是win下操作的 步 1 购买嵌入式开发板 可选够集成度大的 可烧写系统的
  • 【ES小结】还在用ElasticSearch做查询?换条思路实现高效数据统计

    博客首页 派 大 星 欢迎关注 点赞 收藏 留言 本文由派大星原创编撰 系列专栏 ES小结 本系列记录ElasticSearch技术学习历程以及问题解决 ElasticSearch高效数据统计 聚合查询 什么是聚合查询 Kibana 命令测
  • logback日志配置

随机推荐

  • Top-level statements must precede namespace and type declarations. [Test]csharp(CS8803)

    C NET 6 结构体 C 控制台应用程序定义了一个结构体 然后创建结构体实例 报如下错误 Top level statements must precede namespace and type declarations Test csh
  • 浅谈Dictionary用法

    一 基础篇 1 Dictionary泛型类提供了从一组键到一组值的映射 即键和值的集合类 2 Dictionary通过键来检索值的速度是非常快的 这是因为 Dictionary 类是作为一个哈希表来实现的 3 定义方式 Dictionary
  • 爬虫-Xpath-数据提取

    Xpath数据提取 xpath基本介绍和使用 xpath中常用的获取节点的表达式 xpath中常用的获取特定节点的表达式 XPath XML Path Language 是一门在 HTML XML 文档中查找信息的 语言 可用来在 HTML
  • return _compile(pattern, flags).search(string) TypeError: expected string or bytes-like object

    今天使用正则处理excel的数据时 报了一个错误 记录一下处理的方法 一开始去查了下报错 但是大多别人的答案却不能够解决我的问题 该错误的意思是 类型错误 期望的字符串或字节类对象 那就是我使用正则的数据有问题 我查看了下我的数据类型 果然
  • 容器云技术选择之kubernetes和swarm对比

    swarm和k8s本质都是容器编排服务 它们都能把底层的宿主机抽象化 然后将应用从以构建好的镜像开始 最终以docker的方式部署到宿主机上 应该选择哪种方案作为我们的容器云服务呢 我觉得k8s kubernetes简称 跟swarm的比较
  • 写出Java爱心代码

    以下是一段简单的Java代码 它用字符画了一个爱心图形 public class Heart public static void main String args System out println System out println
  • 猜数字小游戏(JAVA)

    猜数字小游戏 题目描述 代码 运行效果 新增功能 思路 代码 运行效果 题目描述 猜数字 又称 Bulls and Cows 是一种古老的的密码破译类益智类小游戏 起源于20世纪中期 一般由两个人或多人玩 也可以由一个人和电脑玩 通常由两个
  • 论区块链应用开发中的技术选型

    区块链技术栈总览 区块链技术栈现阶段总览 链端选型 Fabric x 逐渐被市场淘汰 和以太坊不能兼容的链 x 原因 单打独斗 无法借力 FISCO BCOS Venachain 基于 Move 的链 maybe 前端技术栈 React o
  • RobotFramework详细安装教程

    RobotFramework详细安装教程 Robot Framework安装教程 需要安装以下 1 Python2 7以上版本 这里用的是 Python3 8 2 pip 和 setuptools Python 的套件管理程式 最新版的Py
  • Linux中/etc目录下passwd、shadow、group、gshadow文件解释

    Linux用户和用户组管理 etc目录解释 1 Linux etc passwd内容解释 2 Linux etc shadow 影子文件 内容解析 3 Linux etc group文件解析 4 Linux etc gshadow文件内容解
  • js中this指向问题

    1 概念 函数中的this指向 非严格模式下this指向全局变量window 严格模式下this为undefined 对象中的this指向 指向该对象本身 类中的this指向 指向该对象的实例对象 this指向的修改问题 2 函数中的thi
  • 【ES6】中var、let、const的区别

    一 块级作用域 ES5 中作用域有 全局作用域 函数作用域 ES6 中新增了块级作用域 块级作用域由 包括 if语句和for语句里面的 也属于块级作用域 var a 1 console log a 1 console log a 1 通过v
  • 微信小程序获取用户openid,头像昵称信息,后台java代码

    小程序前端 app js wx login success res gt 发送 res code 到后台换取 openId sessionKey unionId if res code wx getUserInfo success func
  • 池化层的作用

    目录 1 池化层理解 2 池化层的作用 3 函数解析 tf nn max pool value ksize strides padding name None 4 代码演示详解维度变化 1 池化层理解 池化层夹在连续的卷积层中间 用于压缩数
  • 【Python】请编码实现动物世界的继承关系:动物(Animal)具有行为:吃(eat)、睡觉(sleep)动物包括:兔子(Rabbit),老虎(Tiger)动物吃的行为各不相同(兔子吃草,老虎吃肉)

    请编码实现动物世界的继承关系 a 动物 Animal 具有行为 吃 eat 睡觉 sleep b 动物包括 兔子 Rabbit 老虎 Tiger c 这些动物吃的行为各不相同 兔子吃草 老虎吃肉 d 但睡觉的行为是一致的 e 请通过继承实现
  • 求助帖!Robotframework导入selenium2library库后缺少一些关键字,怎么解决

    求助帖 Robotframework导入selenium2library库后缺少一些关键字 怎么解决 找不到Open Browser等一般关键字 安装的版本如下 但是我的site packages中的文件都正常 可就是找不到某些关键字 求助
  • 计算机学感悟,计算机学习感悟

    篇一 计算机学习感悟 浅谈学习 计算机应用基础 的收获与感悟 随着信息技术的快速发展 计算机已成为人们在经济生活 社会 交往和日常生活中不可缺少的工具 是否具有使用计算机的基本技 能 已成为衡量一个人文化素质高低的重要标志之一 上高中的时候
  • 目标检测params,flops计算

    目标检测params flops计算 参数数量用params表示 关系到模型大小 单位通常为M 通常参数用float32表示 所以模型大小是参数数量的4倍 理论计算量用FLOPs或者M Adds表示 这里用FLOPs写起来简单 关系到算法速
  • Java之异常Throwable

    异常Throwable 自定义异常案例 package com week03 Day01 总结 异常 Throwable Error Exception CheckException RuntimeException 编译时异常 1 直接抛
  • mqtt 变为乱码 接受16进制字节流_常见乱码问题分析和总结

    背景概述 在我们的日常工作生活中一定碰到过下面的情况 场景1 安装完某个软件后 看到的安装程序变成类似这样的一组字符 图1所示的样子 图 1 安装程序中的乱码 场景2 打开一个文档发现里面的内容全面是问号 如图2所示 图 2 带有问号的乱码