asp.net+mySql 乱码解决办法(转贴)
晚上做东西,出现网页从mysql数据库中读中文数据时出现乱码,但是csdn中没有检索出来答案,好像很多人对次都有些迷糊,后来查到一份资料,证明是好用的,转贴给大家:
MySQL的中文用的是iso8859-1的编码,然而,还有很多很多的ASP.NET 中文网页,我们设定的都是gb2312的编码。所以,出现乱码应该是必然的,不出现乱码问题才大.
既然网页用的是gb2312的编码,那么,解决的办法就是在提交数据的时候做一个转换。我改写了这么一个程序,(以下所有编码皆为VB编码)
Function gb2312_iso8859(ByVal src As String)
Dim iso, gb2312 As System.Text.Encoding iso = System.Text.Encoding.GetEncoding("iso8859-1")
gb2312 = System.Text.Encoding.GetEncoding("gb2312")
Dim gb As Byte()
gb = gb2312.GetBytes(src)
Return iso.GetString(gb)
End Function
这个程序就是把一个gb2312的string 转换成一个 iso8859-1的String. 然后再提交上去。同样的从数据库那边拿过来的数据如果要在gb2312 的网页上正常显示,我们需要把数据从iso8859-1转换成bg2312. 按上面的程序改写如下:
Function iso8859_gb2312(ByVal src As String)
Dim iso, gb2312 As
System.Text.Encoding iso = System.Text.Encoding.GetEncoding("iso8859-1")
gb2312 = System.Text.Encoding.GetEncoding("gb2312")
Dim isoResult As Byte() isoResult = iso.GetBytes(src) Return gb2312.GetString(isoResult)
End Function
而且,如果你用的是dataset 你可以把整个dataset 放到一个暂时性的 xml 文件,用同样的方法把这个文件的编码给转换了,编码如下:
Dim xml As Stringxml = ds.GetXml()ds.Clear()
Dim iso, gb As
System.Text.Encodinggb =System.Text.Encoding.GetEncoding("gb2312")
iso= System.Text.Encoding.GetEncoding("iso8859-1")
Dim ub As Byte()ub = iso.GetBytes(xml)xml = gb.GetString(ub)ds.ReadXml(New System.IO.StringReader(xml))
就是这样.通过这个转换之后,dataset 直接可以用作各种控件的datasource, 中文显示正常。