如何在Asp.net中阅读阿拉伯语字符集数据

时间:2012-02-24 05:02:26

标签: vb.net oracle character-encoding

我正在使用此代码从Oracle数据库中读取数据。存储在Oracle中的数据是Navarchar2数据类型,但是当它在gridview中显示时,它看起来像这样。 ?&安培; ? ?????? ??? ?我的数据库Charaacter设置为WE8MSWIN1252

以下是我从Oracle数据库中读取的mY代码。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      Dim con = New OleDbConnection("Data Source=cms; User ID=cms20112012; Password=??????; provider=OraOLEDB.Oracle")           
       con.open()
        Dim cmd As New OleDbCommand("Select to_char(grower_Name) grower from V_GROW", con)
        Dim da As New OleDbDataAdapter(cmd)
        Dim ds As New DataSet
        Dim I As Long
        da.Fill(ds, "V_GROW")
        GridView1.DataSource = ds
        GridView1.DataBind()
        For I = 0 To ds.Tables("V_GROW").Rows.Count - 1
            Dim grower As String = ds.Tables("V_GROW").Rows(I).Item("grower")
            grower = Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(grower))
            Label1.Text = grower
        Next I
        con.close()
    End Sub

请有人帮我解决这个问题

2 个答案:

答案 0 :(得分:0)

数据库的国家字符集是什么?什么数据类型是GROWER_NAME

假设GROWER_NAMENVARCHAR2并且国家字符集是AL16UTF16

  1. 您不想在查询中致电TO_CHAR
  2. 您不希望在显示之前将数据从Unicode转换为ASCII。 ASCII无法对阿拉伯数据进行编码,因此数据总是会被破坏。
  3. 您确定阿拉伯数据已正确写入数据库吗?什么

    SELECT dump(grower_name, 1016)
      FROM v_grow
     WHERE rownum < 2
    

    返回(假设每一行都有阿拉伯数据)。

答案 1 :(得分:0)

您的数据库需要使用UTF编码,否则将无法正确存储/检索。设置Oracle数据库时 - 必须将字符集(National和Database)设置为UTF。