首页 新闻 会员 周边

asp.net连接mysql数据库使用latin1字符集

0
悬赏园豆:200 [已关闭问题] 关闭于 2012-08-14 11:35

在不更改数据库的前提下
本人使用以下方法  
1.配置连接字符串 加入charset=utf8
2.页面配置 codepage=65001
3.在tetle上加入一行
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
4.在查询 和添加语句加上 set names 'utf8';
5.在web.config 加入 <globalization requestEncoding="utf8" responseEncoding="utf8"/
>
问题补充:

以上方法都是乱码 。。。。。各位大神 有什么办法解决?

qw123456的主页 qw123456 | 初学一级 | 园豆:14
提问于:2012-08-13 09:53
< >
分享
所有回答(5)
0
羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-13 11:02

我用的就是这个类啊。。。

支持(0) 反对(0) qw123456 | 园豆:14 (初学一级) | 2012-08-13 11:08

@qw123456: 为啥要用latin字符??

支持(0) 反对(0) 羽商宫 | 园豆:2490 (老鸟四级) | 2012-08-13 11:11

@王凌志: 因为项目中必须要用latin1字符集 ,我也想用gbk字符集啊。。。。就没那么多麻烦事了

支持(0) 反对(0) qw123456 | 园豆:14 (初学一级) | 2012-08-13 13:18
-1

查询出来的结果是乱码?

dudu | 园豆:30994 (高人七级) | 2012-08-13 13:16

是乱码,但是 现在 只能用最笨的方法了

public static string ISO8859_GB2312(string read)
{
//声明字符集
System.Text.Encoding iso8859, gb2312;
//iso8859
iso8859 = System.Text.Encoding.GetEncoding("iso8859-1");
//国标2312
gb2312 = System.Text.Encoding.GetEncoding("gb2312");
byte[] iso;
iso = iso8859.GetBytes(read);
//返回转换后的字符
return gb2312.GetString(iso);
}
public static DataSet reqdsStr(DataSet ds)
{
DataTable dt = ds.Tables[0];
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
string dsStr = ds.Tables[0].Rows[i][j].ToString();
string rqStr = ISO8859_GB2312(dsStr);
ds.Tables[0].Rows[i][j] = rqStr;
}
}
return ds;
}

支持(0) 反对(0) qw123456 | 园豆:14 (初学一级) | 2012-08-13 13:19

@qw123456: 可以参考之前的一个博问(MySQL 字段别名乱码,在线等)的问题补充部分。

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-08-13 13:22

@dudu: 哦 谢谢 ,但是不能更改数据库,因为别的项目在用这个库 ,所以一点都不能改,我现在的方法 就是上面用的

支持(0) 反对(0) qw123456 | 园豆:14 (初学一级) | 2012-08-13 15:03
0

public static string ISO8859_GB2312(string read)
{
//声明字符集
System.Text.Encoding iso8859, gb2312;
//iso8859
iso8859 = System.Text.Encoding.GetEncoding("iso8859-1");
//国标2312
gb2312 = System.Text.Encoding.GetEncoding("gb2312");
byte[] iso;
iso = iso8859.GetBytes(read);
//返回转换后的字符
return gb2312.GetString(iso);
}
public static DataSet reqdsStr(DataSet ds)
{
DataTable dt = ds.Tables[0];
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
string dsStr = ds.Tables[0].Rows[i][j].ToString();
string rqStr = ISO8859_GB2312(dsStr);
ds.Tables[0].Rows[i][j] = rqStr;
}
}
return ds;
}

此方法只适用于 整体结构 封装性OK的情况下适用 。。。如果有多个返回集的话 。。。另想出入吧

qw123456 | 园豆:14 (初学一级) | 2012-08-13 15:05
0

你确定你的数据库的编码是utf-8的吧,不会是latin1的吧

如果你的数据库的编码是latin1的编码,不能进行改变,那你可以这样才编码你需要输入的中文:

goodsInfo.ShopDef.ShopDesc = Encoding.GetEncoding("Latin1").GetString(Encoding.GetEncoding("gb2312").GetBytes(goodsInfo.ShopDef.ShopDesc));

goodsInfo.ShopDef.ShopDesc 是定义的属性,是中文的。

chenping2008 | 园豆:9836 (大侠五级) | 2012-08-13 16:05

数据库编码是latin1 ,数据库是utf-8 我都不要编码了。。asp。nent默认编码就是utf-8 我的问题也就不存在了

支持(0) 反对(0) qw123456 | 园豆:14 (初学一级) | 2012-08-13 16:07

我刚才已经在上面 把我写发放写在上面了 针对连接mysql 类的 返回结果结果集dataSet进行处理 ,我想要的就是 不需要更改返回结果集 。呵呵 有好的办法 这个分数都给你 

支持(0) 反对(0) qw123456 | 园豆:14 (初学一级) | 2012-08-13 16:12

@qw123456: 

那你可以提取数据出来的时候,把latin1的编码的文字转换成gb2312的不就行了,

查询给条件比较的时候,可以通过上面给出的代码把gb2312的转换成latin1

连接字符串中的charset=latin1 或者 charset=gb2312 或者 charset = gbk试试

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-08-13 16:41
0

你都知道数据库编码不是utf-8了,为什么还要“配置连接字符串 加入charset=utf8”呢?试试charset改成其它编码吧

I,Robot | 园豆:9783 (大侠五级) | 2012-08-13 17:18

其他都一样的。- -

支持(0) 反对(0) qw123456 | 园豆:14 (初学一级) | 2012-08-13 17:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册