【问题标题】:C#.Net Windows Application Hindi Writing and displayC#.Net Windows 应用程序印地语编写和显示
【发布时间】:2016-12-27 00:22:06
【问题描述】:

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

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

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 和标签中看到问号而不是印地语字符。作为选择查询的结果,我需要显示印地语。这是我正在使用的代码:

    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 可能没有安装印地语。另外,我无法安装印地语区域语言,因为它需要许可的 Windows,而且我不能确定每台机器都有许可版本。

  2. 此外,上述代码在复制粘贴的印地语上也能正常工作。插入数据时无法输入印地语。

请帮助。

【问题讨论】:

  • 您的问题是机器上没有安装语言。据我所知,没有办法解决这个问题。如果机器上没有该语言,您如何期望它显示或允许输入该语言?
  • 嗨。我不确定这是语言问题还是我是否安装了印地语。如描述中所述,我可以从浏览器复制印地语,将其粘贴到 .net 文本框中,将其保存在数据库中,然后在印地文文本上使用 Where 子句触发 Select 查询。我可以通过复制粘贴来阅读印地语。只是无法在数据库的标签中显示它。

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


【解决方案1】:

虽然安装字体将是它的唯一选择,但如果数据以十六进制 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;
    }

以下是一个使用 Unicode 的单行示例,要使其正常工作,您必须将控制台字体更改为支持 Unicode 的字体:

Console.WriteLine("{0}","\u0935\u093F\u0928\u094B\u0926");

有关 Unicode 表的列表,请参阅 unicode-table.com,但 rapidtables 更适合 Unicode 转义序列

【讨论】:

  • 嗨。我认为 NVarChar 存储 Unicode 数据。但是您在此代码中编写的输入字符串是什么?它是什么数据?
  • 是一个Unicode数字,代表Unicode字符unicode-table.com/en/#0935
【解决方案2】:

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

以下是解决方案:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2012-08-21
    相关资源
    最近更新 更多