文章目录

  • 常见乱码产生原因
  • 方块码的产生原因
    • 代码测试
    • 控制台打印以下信息
    • 编码原理
  • 锟拷码的产生原因
    • 代码测试
    • 控制台打印以下信息
    • 编码原理

常见乱码产生原因

名称 示例 特点 原因
古文码 浜屽紶涓夋潕鍥旇档鍏 大多为不认识的古文,夹杂日韩文 以GBK方式读取UTF-8编码的中文
方块码 ������� 大部分字符为方块问号 以UTF-8方式读取GBK编码的中文
符号码 å¼ä¸æåçäºèµµ­èä¸ 大部分字符为各种符号 以ISO8859-1方式读取UTF-8编码的中文
拼音码 ÕÅÈýÀîËÄÍõÎåÕÔÁ 大部分字符为带着声调的字母 以ISO8859-1方式读取GBK编码的中文
问句码 寮犱笁鏉庡洓鐜嬩簲叚鑰? 基本和古文码一致,字符串为偶数时正常,长度为奇数时结尾会带上问号 以GBK方式读取UTF-8编码的中文,然后又用GBK的格式再次读取
锟拷码 锟斤拷锟斤拷锟斤拷 基本都是锟斤拷三个字符 以GBK方式读取UTF-8编码的��

方块码的产生原因

下面我们来看一下方块码具体是怎么来的
首先需要知道方块码‘�’的产生原因,由上图可知,方块码是以UTF-8方式读取GBK编码的中文,而UTF-8和GBK编码的区别在于:

  • UTF-8会将中文转化成三个字节进行存储
  • GBK会将中文转化成两个字节进行存储

代码测试

public class TestCode {public static void main(String[] args) {test_UTF8_GBK();}//UTF8_GBKstatic void test_UTF8_GBK(){try {byte[] GBKbyte = "张三".getBytes("GBK");System.out.print("张三的GBK编码:");for (byte b : GBKbyte) {System.out.print(b + " ");}String UTF8_GBKbyte = new String(GBKbyte, "UTF-8");System.out.println("\nUTF-8读取GBK编码:"+UTF8_GBKbyte);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}

控制台打印以下信息

张三的GBK编码:-43 -59 -56 -3
UTF-8读取GBK编码:����

编码原理

"张三"在GBK中实际以-43 -59 -56 -3 进行存储,再由UTF-8读取时,由于这些码在UTF-8库中无法匹配
UTF-8字符集也有一个专门用于提示用户字符无法识别或展示的替换符号:也就是‘�’
因此,我们会看到,使用UTF-8读取GBK编码的中文时就会产生方块码

锟拷码的产生原因

由上表可知,锟拷码是由于以GBK方式读取UTF-8编码的��得到,而如果产生了方块码,就有可能会产生锟拷码

代码测试

public class TestCode {public static void main(String[] args) {test_GBK_UTF8byte();}static void test_GBK_UTF8byte() {try {byte[] UTF8byte = "����".getBytes("UTF-8");for (byte b : UTF8byte) {System.out.print(" " + b);}String GBK_UTF8byte = new String(UTF8byte, "GBK");System.out.println("\n" + GBK_UTF8byte);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}

控制台打印以下信息

-17 -65 -67 -17 -65 -67 -17 -65 -67 -17 -65 -67
锟斤拷锟斤拷

����首先被转化成了12个字节,按照-17 -65 -67的顺序排列,因此,当使用GBK读取时,会两个两个进行解析,-17 -65 解析成锟,-67 -17 解析成斤,-65 -67解析成拷

编码原理

由于�在UTF-8编码中会被编码成-17 -65 -67三个字节,而两个方块码会产生6个字节,正好满足GBK编码中取两个字节进行解码

  • -17 -65 对应 “锟”
  • -67 -17 对应 “斤”
  • -65 -67 对应 “拷”
    因此当我们使用GBK来读取UTF-8编码的方块码时,原来的两个方块码“��”就会被GBK读取成了“锟斤拷”,如下表所示
字符 UTF-8 GBK
-17 -65 -67
�� -17 -65 -67 -17 -65 -67
-17 -65
-67 -17
-65 -67

常见乱码产生原因以及锟斤拷的产生过程相关推荐

  1. Python模拟锟斤拷等各类乱码

    锟拷码和口字码 说到乱码问题就不得不提到锟斤拷,这算是非常常见的一种乱码形式,那么它到底是经过何种错误操作产生的呢?下面我们一步步探究. 看一个基本示例: "��".encode( ...

  2. python3 中文乱码 锟斤_乱码问题解决之“锟斤拷”

    原标题:乱码问题解决之"锟斤拷" 本文作者:张语盈 本文编辑:李朋冲 技术总编:薛 原 乱码是我们在用stata读入文件时经常会出现并且令人头疼的问题,当我们错误定义了读入文件的编 ...

  3. java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转乱码问题

    作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福. 但其实只要明白编码之间的转换规律,其实乱码so easy~ 我们知道,计算机存储数据都是2进制,就是0和 ...

  4. vue导出excel乱码(锟斤拷唷?锟?;锟斤拷)

    我这个是 post请求乱码了 ,如果是get,就直接window.open(url,'_blank')就可以了 1. "锟斤拷唷?锟?;锟斤拷"这种乱码信息导致的原因是:整个数据流 ...

  5. java 锟斤 解决乱码_java eclipse 开发中文乱码锟斤拷小锟斤拷锟

    最近在做项目的时候发现有些员工提交的代码到SVN上之后乱码了,eclipse没有乱码,乱码字样为"锟斤拷小锟斤拷锟斤拷植锟斤拷锟斤拷3146锟斤拷锟斤拷锟斤拷锟绞撅拷锟绞硷拷锟揭筹拷锟?&q ...

  6. 烫烫烫、屯屯屯、锟斤拷、诺诺诺的简单示例代码

    手持两把锟斤拷, 口中疾呼烫烫烫. 脚踏千朵屯屯屯, 笑看万物锘锘锘. 烫烫烫 简单点说,最常见的就是 数组没初始化 并且按照%s 输出了. #include<stdio.h> int m ...

  7. 看程序员如何给女朋友解释什么是锟斤拷?

    周末女朋友出去逛街了,我自己一个人在家看综艺节目,突然,女朋友给我打来电话. 过了一会,女朋友回来了,她拿出手机,给我看了她在超市拍的照片:  要想知道什么是乱码,需要先从计算机编码说起. 字符编码 ...

  8. 漫画:如何给女朋友解释什么是“锟斤拷”?

    作者 | 漫话编程 本文经授权转载自漫话编程(ID:mhcoding) 周末女朋友出去逛街了,我自己一个人在家看综艺节目,突然,女朋友给我打来电话. 过了一会,女朋友回来了,她拿出手机,给我看了她在超 ...

  9. “锟斤拷“的前世今生

    不管是在工作中还是生活中,相信很多同学都被"锟斤拷"深深的毒害过,比如这样, 这样, 还有这样, 那么究竟是为什么会出现这些奇怪的字符?接下来我们一探究竟! ASCII编码 在计算 ...

最新文章

  1. LSTM终获「正名」,IEEE 2021神经网络先驱奖授予LSTM提出者Sepp Hochreiter
  2. Mysql 存储引擎和事物基础概念
  3. jar打包 剔除第三方依赖以及它的依赖_maven打包成第三方jar包且把pom依赖包打入进来的方法...
  4. Centos Missing Library: QtWebKit.so.4
  5. 大咖开讲:一小时学会.NET MVC开发的那些事儿
  6. mysql镜像压缩包使用_如何连接docker的mysql镜像
  7. 【Java】统计随机抽出两个小于等于N的互异正整数的频率
  8. mysql create database to_mysql之CREATE DATABASE Syntax(创建数据库)
  9. 停车场管理系统linux实现,基于Linux的停车场管理系统的设计与实现
  10. 图片无损放大软件Topaz Gigapixel AI for Mac
  11. layer弹出层不居中
  12. 雪花飘落代码java_个人网站html5雪花飘落代码JS特效下载
  13. Subpalindromes
  14. Angel-Eye: A Complete Design Flow for MappingCNN onto Embedded FPGA
  15. 骑行318、 2016.7.29
  16. android马达测试,技术科普丨马达测试知多少?
  17. ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
  18. DLL文件是怎么产生的,DLL文件是什么,DLL文件有什么用
  19. Ubuntu13.04配置完全指南(四)安装常用软件包
  20. Fusion Access基本操作

热门文章

  1. Problem D. Euler Function HDU - 6322(欧拉数,找规律)
  2. [DirectX 9.0笔记]第二章 渲染管线
  3. 【区块链】开源社区发力区块链,超级账本会成就Linux一样的传奇吗?
  4. knn matting matlab,一键抠图,毛发毕现:这个GitHub项目助你快速PS
  5. win101909要不要更新_win101909更新了哪些内容?Win10 1909千万别更新原因
  6. 从 三江方士 的 中华级数 想到 数学的界限
  7. android平板游戏隐藏功能,平板电脑怎么隐藏游戏
  8. JVM——GC算法原理
  9. 〖Python 数据库开发实战 - Python与MySQL交互篇⑭〗- 项目实战 - 实现新闻管理 - 审批新闻 功能
  10. 机器人笔记psv中文_《机器人笔记》白金攻略 机器人笔记奖杯攻略