常见乱码产生原因以及锟斤拷的产生过程
文章目录
- 常见乱码产生原因
- 方块码的产生原因
- 代码测试
- 控制台打印以下信息
- 编码原理
- 锟拷码的产生原因
- 代码测试
- 控制台打印以下信息
- 编码原理
常见乱码产生原因
名称 | 示例 | 特点 | 原因 |
---|---|---|---|
古文码 | 浜屽紶涓夋潕鍥旇档鍏 | 大多为不认识的古文,夹杂日韩文 | 以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 |
常见乱码产生原因以及锟斤拷的产生过程相关推荐
- Python模拟锟斤拷等各类乱码
锟拷码和口字码 说到乱码问题就不得不提到锟斤拷,这算是非常常见的一种乱码形式,那么它到底是经过何种错误操作产生的呢?下面我们一步步探究. 看一个基本示例: "��".encode( ...
- python3 中文乱码 锟斤_乱码问题解决之“锟斤拷”
原标题:乱码问题解决之"锟斤拷" 本文作者:张语盈 本文编辑:李朋冲 技术总编:薛 原 乱码是我们在用stata读入文件时经常会出现并且令人头疼的问题,当我们错误定义了读入文件的编 ...
- java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转乱码问题
作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福. 但其实只要明白编码之间的转换规律,其实乱码so easy~ 我们知道,计算机存储数据都是2进制,就是0和 ...
- vue导出excel乱码(锟斤拷唷?锟?;锟斤拷)
我这个是 post请求乱码了 ,如果是get,就直接window.open(url,'_blank')就可以了 1. "锟斤拷唷?锟?;锟斤拷"这种乱码信息导致的原因是:整个数据流 ...
- java 锟斤 解决乱码_java eclipse 开发中文乱码锟斤拷小锟斤拷锟
最近在做项目的时候发现有些员工提交的代码到SVN上之后乱码了,eclipse没有乱码,乱码字样为"锟斤拷小锟斤拷锟斤拷植锟斤拷锟斤拷3146锟斤拷锟斤拷锟斤拷锟绞撅拷锟绞硷拷锟揭筹拷锟?&q ...
- 烫烫烫、屯屯屯、锟斤拷、诺诺诺的简单示例代码
手持两把锟斤拷, 口中疾呼烫烫烫. 脚踏千朵屯屯屯, 笑看万物锘锘锘. 烫烫烫 简单点说,最常见的就是 数组没初始化 并且按照%s 输出了. #include<stdio.h> int m ...
- 看程序员如何给女朋友解释什么是锟斤拷?
周末女朋友出去逛街了,我自己一个人在家看综艺节目,突然,女朋友给我打来电话. 过了一会,女朋友回来了,她拿出手机,给我看了她在超市拍的照片:  要想知道什么是乱码,需要先从计算机编码说起. 字符编码 ...
- 漫画:如何给女朋友解释什么是“锟斤拷”?
作者 | 漫话编程 本文经授权转载自漫话编程(ID:mhcoding) 周末女朋友出去逛街了,我自己一个人在家看综艺节目,突然,女朋友给我打来电话. 过了一会,女朋友回来了,她拿出手机,给我看了她在超 ...
- “锟斤拷“的前世今生
不管是在工作中还是生活中,相信很多同学都被"锟斤拷"深深的毒害过,比如这样, 这样, 还有这样, 那么究竟是为什么会出现这些奇怪的字符?接下来我们一探究竟! ASCII编码 在计算 ...
最新文章
- LSTM终获「正名」,IEEE 2021神经网络先驱奖授予LSTM提出者Sepp Hochreiter
- Mysql 存储引擎和事物基础概念
- jar打包 剔除第三方依赖以及它的依赖_maven打包成第三方jar包且把pom依赖包打入进来的方法...
- Centos Missing Library: QtWebKit.so.4
- 大咖开讲:一小时学会.NET MVC开发的那些事儿
- mysql镜像压缩包使用_如何连接docker的mysql镜像
- 【Java】统计随机抽出两个小于等于N的互异正整数的频率
- mysql create database to_mysql之CREATE DATABASE Syntax(创建数据库)
- 停车场管理系统linux实现,基于Linux的停车场管理系统的设计与实现
- 图片无损放大软件Topaz Gigapixel AI for Mac
- layer弹出层不居中
- 雪花飘落代码java_个人网站html5雪花飘落代码JS特效下载
- Subpalindromes
- Angel-Eye: A Complete Design Flow for MappingCNN onto Embedded FPGA
- 骑行318、 2016.7.29
- android马达测试,技术科普丨马达测试知多少?
- ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
- DLL文件是怎么产生的,DLL文件是什么,DLL文件有什么用
- Ubuntu13.04配置完全指南(四)安装常用软件包
- Fusion Access基本操作
热门文章
- Problem D. Euler Function HDU - 6322(欧拉数,找规律)
- [DirectX 9.0笔记]第二章 渲染管线
- 【区块链】开源社区发力区块链,超级账本会成就Linux一样的传奇吗?
- knn matting matlab,一键抠图,毛发毕现:这个GitHub项目助你快速PS
- win101909要不要更新_win101909更新了哪些内容?Win10 1909千万别更新原因
- 从 三江方士 的 中华级数 想到 数学的界限
- android平板游戏隐藏功能,平板电脑怎么隐藏游戏
- JVM——GC算法原理
- 〖Python 数据库开发实战 - Python与MySQL交互篇⑭〗- 项目实战 - 实现新闻管理 - 审批新闻 功能
- 机器人笔记psv中文_《机器人笔记》白金攻略 机器人笔记奖杯攻略