乱码的原因分析汇总
先读下以下文章,了解下数据存储,我也很认真的读了
数据在内存中的存储形式
一个汉字占用几个字节
计算机中为何不直接使用 UTF-8 编码进行存储而要使用 Unicode 再转换成 UTF-8 ?
一个汉字是用2个字节存储还是3个字节
万变不离其宗
没有电的发明,计算机也不会存在
0和1才是真的,其它都是浮云:
**计算机运作:按需分配电位数量,通电,(逻辑运算),断电:
8bit = 1 byte(字节只是用来算数据量大小的,如财富量中的百千万,内容藏在0和1的序列里面)
前面大神已经讲了很多理论了,接下来我们写下代码做下实验( python3):
1,字符:
ansi: 用ord()函数可以返回字符的ansi编码的10进制数值
接下来转成二进制:用bin()函数将10进制转二进制
以上字符在内存中的存储应该是什么样的呢?
大家数一下:
字符 我 需要使用15个位
字符 a 需要使用7个位
字符 1 需要使用6个位(这里的1是字符不是数值)
系统会按8的整数来划分内存,就是byte的整数倍
字符 我 需要使用2个byte
字符 a 需要使用1个byte
字符 1 需要使用1个byte
那是不是字符串**"我a1"在电脑中是4个字节**存储的呢?
我们再对字符进行分析:
大家理解了吧,编码方式的不同,字符在内存中所用的字节数就不同;
小时候写过作文吧,以前写在纸上,现在我们写在电脑上;(window10, txt软件)
操作流程:(大家跟我一起来,左手画…)
1,打开txt软件
2,写一篇作文(作一回语文老师,主题是关于“我的家乡”)
![我的家乡](https://img-blog.csdnimg.cn/20200221183436907.png
3,保存或另存为
注释:这里我建议你另存为:会出现以下选择项
每个都存一个,末尾标注为ansi,unicode, unicode big ,utf-8,然后用代码测一下:
import chardet
def strfiles_dect(list1):
for i in range(4):
try:
with open("zuowen-"+list1[i]+".txt",'rb') as f:
f_bstring = f.read()
f_charInfo = chardet.detect(f_bstring)
print(f_charInfo)
except:
if f:
print('error')
file_x = ["ansi","Unicode","Unicode big endian","UTF-8"]
strfiles_dect(file_x)
显示结果(ansi, Unicode,Unicode big , UTF-8):
这里解释一下:window10默认是gbk,我自已改成为unicode模式;
所以此处ansi的txt也是utf-8模式。
可以参考下文章链接:
ansi转unicode
再提个问题:字符类文档如txt,word文档,excel文档等是怎样读到内存的,其数据存储格式是什么样的
大家先读下下面链接了解下文件后缀如.txt .doc .excel有什么作用,文件名有什么作用,我也是很认真地读了
文件,文本文件以及编码