uncode ansi详解

乱码的原因分析汇总

先读下以下文章,了解下数据存储,我也很认真的读了

数据在内存中的存储形式
一个汉字占用几个字节
计算机中为何不直接使用 UTF-8 编码进行存储而要使用 Unicode 再转换成 UTF-8 ?
一个汉字是用2个字节存储还是3个字节

万变不离其宗

没有电的发明,计算机也不会存在
0和1才是真的,其它都是浮云:
**计算机运作:按需分配电位数量,通电,(逻辑运算),断电:
8bit = 1 byte(字节只是用来算数据量大小的,如财富量中的百千万,内容藏在0和1的序列里面)

前面大神已经讲了很多理论了,接下来我们写下代码做下实验( python3):
1,字符:
ansi: 用ord()函数可以返回字符的ansi编码的10进制数值
ord()
接下来转成二进制:用bin()函数将10进制转二进制

以上字符在内存中的存储应该是什么样的呢?
大家数一下:
字符 需要使用15个位
字符 a 需要使用7个位
字符 1 需要使用6个位(这里的1是字符不是数值)

系统会按8的整数来划分内存,就是byte的整数倍
字符 需要使用2个byte
字符 a 需要使用1个byte
字符 1 需要使用1个byte

那是不是字符串**"我a1"在电脑中是4个字节**存储的呢?
unicode编码
我们再对字符进行分析:
uncode编码
大家理解了吧,编码方式的不同,字符在内存中所用的字节数就不同;

小时候写过作文吧,以前写在纸上,现在我们写在电脑上;(window10, txt软件)
操作流程:(大家跟我一起来,左手画…)
1,打开txt软件
2,写一篇作文(作一回语文老师,主题是关于“我的家乡”)
![我的家乡](https://img-blog.csdnimg.cn/20200221183436907.png

3,保存或另存为
注释:这里我建议你另存为:会出现以下选择项
作文
 bianma
每个都存一个,末尾标注为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有什么作用,文件名有什么作用,我也是很认真地读了
文件,文本文件以及编码

扫描二维码关注公众号,回复: 9442798 查看本文章
发布了11 篇原创文章 · 获赞 0 · 访问量 150

猜你喜欢

转载自blog.csdn.net/kevinai2089/article/details/104423105