字符编码 乱码问题

Posted hanbowen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符编码 乱码问题相关的知识,希望对你有一定的参考价值。

字符编码 乱码问题

首先明确概念
#1、文件从内存刷到硬盘的操作简称存文件
#2、文件从硬盘读到内存的操作简称读文件

乱码的两种情况:
#乱码一:存文件时就已经乱码
存文件时,由于文件内有各个国家的文字,我们单以shiftjis去存,
本质上其他国家的文字由于在shiftjis中没有找到对应关系而导致存储失败
但当我们硬要存的时候,编辑并不会报错(难道你的编码错误,编辑器这个软件就跟着崩溃了吗???),但毫无疑问,不能存而硬存,肯定是乱存了,即存文件阶段就已经发生乱码
而当我们用shiftjis打开文件时,日文可以正常显示,而中文则乱码了

#用open模拟编辑器的过程
可以用open函数的write可以测试,f=open(a.txt,w,encodig=shift_jis
f.write(你瞅啥
何を見て
) #‘你瞅啥‘因为在shiftjis中没有找到对应关系而无法保存成功,只存‘何を見て
‘可以成功

#以任何编码打开文件a.txt都会出现其余两个无法正常显示的问题
f=open(a.txt,wb)
f.write(何を見て
.encode(shift_jis))
f.write(你愁啥
.encode(gbk))
f.write(你愁啥
.encode(utf-8))
f.close()



#乱码二:存文件时不乱码而读文件时乱码
存文件时用utf-8编码,保证兼容万国,不会乱码,而读文件时选择了错误的解码方式,比如gbk,则在读阶段发生乱码,读阶段发生乱码是可以解决的,选对正确的解码方式就ok了,

解决2点

#1、保证不乱吗的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码

#2、在内存中写的所有字符,一视同仁,都是unicode编码,比如我们打开编辑器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是unicode转换成其他编码格式的过程了

 

以上是关于字符编码 乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

命令行的乱码以及编码的问题的解决方法

08 转换流

为了彻底理解乱码问题,一怒之下我把字符集历史扒了个底朝天

如何解决代码GBK/UTF-8等字符,编码显示乱码

java 编程中汉字字符串变成繁体或乱码

Visual Studio Code 1.44 解决中文代码显示乱码问题(小白图文教程)