zoukankan      html  css  js  c++  java
  • 字符编码 乱码问题

    字符编码 乱码问题

    首先明确概念
    #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转换成其他编码格式的过程了
  • 相关阅读:
    python打包成exe可执行文件(pyinstaller)
    pandas入门:pandas的数据结构介绍
    NumPy基础:范例-随机漫步
    NumPy基础:随机数生成
    NumPy基础:线性代数
    NOIP2018总结
    luogu P2327 [SCOI2005]扫雷
    luogu P3197 [HNOI2008]越狱
    luogu P1578 奶牛浴场
    luogu P1003 铺地毯
  • 原文地址:https://www.cnblogs.com/hanbowen/p/9614136.html
Copyright © 2011-2022 走看看