python中文编码变成字符串无法使用encode

      今天有个项目需要合并(A合并到B)我所做的就是数据库的合并操作,其中出现的主要问题就是乱码的问题乱码这个问题是很常见的问题,今天整理了下自己所理解的┅点见解

查看表的时候都是乱码,根本不能进行合并当时就认为肯定是自己查看时候的字符集不对,试了“set names = gbk、utf8、latin1”均显示乱码。再懷疑是不是表结构的问题(根本不可能啊项目都跑了好几年了),不过表的编码确实的用charset latin1 来建立的而用lantin1 建立表,在数据库层写入数据(中文)的话肯定会报warning,不会存成功的而且存的都是符号,但上面的结果却有? 符号所以是显示的问题,其实是正常的经过排查確定是自己终端编码显示的问题,改成GBK并且做默认的字符集连接下才能正常显示(latin1:set names latin1),因为当时存数据就是做latin1的下面写入的上面说明表Φ的文字是GBK编码。
注意:latin1可以存储任何东西包括汉字,二进制等latin1是单字节的,存储都会用内部的编码去表示只要输入流和输出流一致(怎么存就怎么取) 就不会出现乱码情况。如:

如何让表字符编码变成gbk呢单单的alter 转换是不行的。之后就尝试用python来读取插入表看看latin1编碼如何存汉字:(Python)

常见的编码转换分为以下几种情況:

GB 码全称是GB2312-80《信息交换用汉字编码字符集基本集》,1980年发布是中文信息处理的国家標准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码P- Windows3.2和苹果OS就是以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编碼、但兼容支持GB2312GB码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755以拼音排序,二级字3008以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用

GBK编码是中国大陆制订的、等同于UCS的新的中文编码扩展国家标准。GBK工作小组于1995年10月同年12月完成GBK规范。该编码标准兼容GB2312共收录汉字21003个、符号883个,并提供1894个造字码位简、繁体字融于一库。

GBK 包括 GB2312的所有编码有些字GB2312没有,需要用GBK来编码

非unicode编码之间的转换

可以先转为unicode再转为编码2

下面代码为将任意字符串转换为unicode

unicode 与其它编码之间的区别

为什么不所有的文件都使用unicode,还要用GBKutf-8等编码呢?

unicode可以称为抽象编码也就是它只是一种内部表示,┅般不能直接保存
保存到磁盘上时,需要把它转换为对应的编码如utf-8和utf-16。

除上以上的编码方法在读写文件时还可以使用codecs的open方法在读写时进行转换。

命令行默认编码检测和设置

可以用python自带的模块locale来检测命令行默认编码和设置命令行编码

 
 

注意使用 encode() 方法对原字符串进行編码,不会直接修改原字符串如果想修改原字符串,需要重新赋值
 

我要回帖

 

随机推荐