纠结的转码问题
情况如下
Dim b As Byte() = System.Text.Encoding.GetEncoding("gbk").GetBytes(strSql)
strSql = System.Text.Encoding.GetEncoding("cp850").GetString(b)
'必须将sql查询语句转为cp850编码,否则无法语句中无法使用中文
Dim SybaseConn As New AseConnection("Data Source='0.0.0.0';UID='nitty';PWD='sa';Database='abc';")
Dim SybaseCom As New AseCommand(strSql, SybaseConn)
'数据库连接字符串
Dim SybaseDA As New AseDataAdapter(SybaseCom)
Dim Ds As New DataSet
SybaseConn.Open()
SybaseDA.Fill(Ds)
'正常的填充DATASET
GridView1.DataSource = Ds.Tables(0)
GridView1.DataBind()
'绑定
最后情况是GridView1里的中全是乱码,必须转码。那么请问,我应该在那一步转码呢?
[最优解释]
SybaseConn.Open()
SybaseDA.Fill(DS)
DT.Columns.Add("编号", GetType(String))
DT.Columns.Add("付款单位", GetType(String))
DT.Columns.Add("金额", GetType(Double))
DT.Columns.Add("备注", GetType(String))
DT.Columns.Add("付款银行", GetType(String))
DT.Columns.Add("付款账号", GetType(String))
DT.Columns.Add("时间", GetType(Date))
For i As Integer = 1 To DS.Tables(0).Rows.Count
Dim NDR As DataRow = DT.NewRow
For c As Integer = 0 To 6
NDR(c) = GetEncoding("gbk").GetString(GetEncoding("cp850").GetBytes(DS.Tables(0).Rows(i - 1).Item(c)))
Next
DT.Rows.Add(NDR)
Next
GridView1.DataSource = DT
GridView1.DataBind()
从数据库取出值以后进行转码,然后重新放回到datatable里让GridView绑定。
------其他解决方案--------------------
GridView1出现乱码的那一列 用转码转过来
[其他解释]
原来打算在GridView1_RowDataBound里面写,结果发现是不可能的。
因为e.Row.Cells(1).Text里面读出来的值已经混入了奇怪的东西了,将其转码只会得到另一种乱码
[其他解释]
markmark
[其他解释]
看看你数据库查出来的是什么样的?
[其他解释]
查出来是这样
Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim b As Byte() = System.Text.Encoding.GetEncoding("cp850").GetBytes(e.Row.Cells(1).Text)
e.Row.Cells(1).Text = System.Text.Encoding.GetEncoding("gbk").GetString(b)
End If
End Sub
如果这么转的话,还是乱码
[其他解释]
有人帮帮忙吗