数据库中文乱码

楼主,这个问题一般是由于数据库需要的编码格式导致的,你先确认你的数据库是采用什么编码的,然后在入库之前进行相应的转换即可,这个问题我遇到多次,我相信我们遇到的是同一个问题。

我举一个,你参考一下。

例如我从UTF-8编码的文件中获取到一个str,想要存到windows的txt里面,那我在存入之前,应该进行如下的转换:

msg_gbk=msg.decode(‘UTF-8‘).encode(‘GBK‘)

这个时候把msg_gbk存进txt里面,就不会产生乱码了。

今天是mysql 中文问题。

1. 首先设置数据库的表的编码为gbk.

2. python 文件中,编码设置为gbk

import sys
reload(sys)
sys.setdefaultencoding(‘gbk‘)

3.然后将

str = str.encode(‘raw_unicode_escape‘)
str = str.decode(‘unicode_escape‘)
print str
#应该可以输出可读的中文
然后存入库就可以了。

字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312‘),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312‘),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码



代码中字符串的默认编码与代码文件本身的编码一致。

如:s=‘中文‘

如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。

如果字符串是这样定义:s=u‘中文‘

则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。



如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断:

isinstance(s, unicode)  #用来判断是否为unicode

用非unicode编码形式的str来encode会报错

时间: 2024-10-14 08:02:34

数据库中文乱码的相关文章

Net、c# 连接Mysql数据库中文乱码

网上有两种解决方案: 第一种是,每次执行语句的时候都和PHP的类似,先执行 一句“set names utf8”或者“set names gb2312”; 1 MySQLCommand setformat = new MySQLCommand("set names b2312",m_Connection); 2 setformat.ExecuteNonQuery(); 3 setformat.Dispose(); 第二种是,在webconfig里加一句“Charset=gbk”; 1

python读取数据库中文乱码问题

今天朋友遇到过怪问题,在同一个页面显示的2条中文记录一个正常,一个乱码,2条记录分别从不同的表里取出.录入的时候采用直接录入.仔细观察2者区别,发现能正常显示的字段在表中类型为nvarchar,不能的是varchar,试着将其改成nvarchar,问题解决. 因为对sqlserver不熟悉.通过查询手册得知: nvarchar表示以Unicode格式存储可变长度的 数据,所以能显示中文,而varchar是用非unicode存储数据,所以乱码.将Varchar类型设置为nvarchar类型,发现问

Oracle数据库中文乱码问题

最近碰到Oracle乱码问题,刚开始甚是头疼,以前在合肥出差的时候,这种问题也碰到过,当时直接抛给了“乌压压一片”(一个搞数据的同事儿),这次没办法躲过,只好硬着头皮上.虽然我这次碰到的是Oracle乱码问题中的一个,但是我决定将这个乱码问题整理清楚(不整清楚,就觉得身边有个定时炸弹,怕下次整数据库的时候会突然又爆炸). 解决这个问题的关键在于理解字符集的概念,所以在正文开始之前,有必要先提一下字符集的相关知识!(这部分知识,对于解决j2ee中文参数传递过程中出现的乱码,也非常具有参考意义) 一

MySQL数据库中文乱码问题

mysql> select * from books; +-----+---------------------------------+---------+-------------+-------+------------+--------+-------------+ | bId | bName | bTypeId | publishing | price | pubDate | author | ISBN | +-----+--------------------------------

关于Androdi中SQLITE 3采用GBK编码存储,数据库中文乱码问题。

1.最近开发一个项目,用SQLite Expert Personal打开数据库如下图,title会产生乱码,问题. 2.由于SQL lite默认是存储UTF-8格式,后来更改数据库编码类型为ANSI,依据操作系统,本地ANSI为GB2312格式,查看发现编码格式正常. 3.用Android程序读取,采用以下方式,可以完整读取出中文字符. Product pr=new Product(); //解决中文乱码问题 byte[] val = cursor.getBlob(cursor.getColum

PL/sql developer连接数据库的问题以及oracle数据库中文乱码的问题

今天第二次配置PL/sql developer,表示很蛋疼,昨天因为动了一个东西然后莫名其妙的就再也连接不了数据库,总是显示各种错误,我动的东西是因为中文会显示乱码,(因为我是用32位的PL/sql developer连接64位的orcale,所以参照网上的教程在添加了一个环境变量名字是NLS_LANG,值是SIMPLIFIED CHINESE_CHINA.ZHS16GBK,然后把注册表下面的这个名字的值也改成了这一样的,然后我再次登陆就显示各种错误了,连改回去都不行,还尝试过重新创建数据库,最

mysql数据库 中文乱码

看到一篇很好的文章,转录于此 中文乱码似乎是程序编写中永恒的一个话题和难点,就比如MySQL存取中文乱码,但我想做任何事情,都要有个思路才行,有了思路才知道如何去解决问题,否则,即使一时解决了问题,但过后不久又碰到同样的问题可能又会急得抓狂,MySQL中文乱码问题就是如此. 仅仅对MySQL中文乱码的解决而言,我认为主要的一个原则可以归结为五个字:"编码一致性",只要遵循了这个原则,那么中文乱码就不难解决,那么何为"编码一致性"呢?子猴总结为有如下四个方面的编码必须

mysql数据库中文乱码的一点小技巧

查询数据库中的所使用的字符集 SHOW VARIABLES LIKE 'CHARACTER%' 设置数据库的字符编码集 URL=jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8 今天添加数据到数据库,刚好就碰到了中文乱码,将eclipse里面的默认字符集和mysql数据库里面的字符集都改成了utf8,部署运行后还是不行. 后来在网上搜了一下,刚好看到了上面的这个方法, 在数据库连接池的配置文件中改了一下URL的地址,然后就好了.

Mysql 数据库中文乱码问题

Servlet写Mysql数据库中文老师乱码,找了一下发现是数据库建库的时候编码没有设置正确. ALTER DATABASE usercenter CHARACTER SET utf8; 修改一下就OK 了.

数据库中文乱码问题的解决

遇到中文乱码问题,首先用status命令检查数据库的配置,如下: 上图会显示数据库配置的各项信息. 还可以用 show create database XXX,来显示创建数据库的时候的编码设置. 一般来说,要在创建数据库的时候指定数据库的编码方式,有中文的时候,要指定为utf8. 创建方式如上图.此时数据库的默认编码方式即为utf8.但是此时可能会出现如下错误: Incorrect string value:'\xB1\xB1\xBE\xA9' for column 'b' at: 此时就需要检