C#.Net Windows应用程序印地语写作和显示

时间:2016-08-19 18:42:09

标签: c# .net sql-server sql-server-2008 unicode

我正在使用带有C#的VS 2008 Express处理Windows窗体应用程序项目,其中印地文和英文数据都需要存储在SQL Server 2008 Express数据库中。

我创建了一个包含NVARCAR(MAX)列的表,并使用以下代码将hindi存储到数据库中:

com.CommandText = "INSERT INTO test(name, data) VALUES (@a, @b)";
com.Parameters.Add("@a", SqlDbType.NVarChar).Value =  textBox1.Text.Trim();
com.Parameters.Add("@b", SqlDbType.NVarChar).Value =  textBox2.Text.Trim();

con.Open();

if (com.ExecuteNonQuery() > 0)
    MessageBox.Show("Success");
else
    MessageBox.Show("Failed");

con.Close();

代码工作正常,并在印地文中保存数据。

以下是我面临的问题:

  1. 检索时,我在datagridview和label中看到问号而不是印地文字符。作为select查询的结果,我需要显示hindi。这是我正在使用的代码:

    com.CommandText = "SELECT data FROM test WHERE name=@name";
    com.Parameters.Add("@name", SqlDbType.NVarChar).Value = textBox1.Text.Trim();
    
    con.Open();
    
    SqlDataAdapter da = new SqlDataAdapter(com);
    
    DataTable dt = new DataTable();
    da.Fill(dt);
    
    dataGridView1.DataSource = dt;
    
    SqlDataReader dr = com.ExecuteReader();
    
    if(dr.HasRows)
    {
        while(dr.Read())
        {
            textBox2.Text = dr.GetValue(0).ToString();
        }
    }
    
    con.Close();
    

    注意:印地语比较工作正常,但在数据网格视图和标签/文本框中不显示印地语。

    注意:我使用的Windows 7可能没有安装hindi。此外,我无法安装印地文区域语言,因为它需要许可的窗口,我不能确定每台机器都有许可版本。

  2. 此外,上述代码适用于复制粘贴的印地文。插入数据时我无法输入印地文。

  3. 请帮助。

2 个答案:

答案 0 :(得分:0)

尽管安装字体是唯一的选择,但如果数据以十六进制Unicode存储,则Unicode也可用于显示数据:

void Main()
{
   string input = "0935;093F;0928;094B;0926;";
   Regex rx = new Regex(@"([0-9A-Fa-f]{4});");
   string output = rx.Replace(input, match => ((char)Int32.Parse(match.Groups[1].Value, NumberStyles.HexNumber)).ToString());
   textBox2.Text = output;
}

答案 1 :(得分:0)

我找到了问题,并希望分享解决方案,以便所有访问者都知道这是正确的方法,并且不需要额外的劳动。

以下是解决方案:

  1. 对于第一个问题,问题代码就是答案本身。只有两列的数据类型:数据库中的名称和数据需要为Nvarchar。错误地,我将数据列保留为varchar,这是实际问题。

  2. 要允许印地文输入,只需在区域设置中将hindi语言添加到键盘布局,并在此帖子中按照@cshapcoder的回答:Hindi Input in textbox c# application