3

嗨,我开发了一个 Windows 应用程序,它允许用户保存数据并以泰米尔字体查看数据。我安装了“Bamini”字体(泰米尔语字体),并将文本框和 datagridview 设置为 Bamini 字体。我能够以泰米尔语保存和检索数据。

问题是我输入的泰米尔语数据被编码并保存在数据库中,例如:如果我在文本框中输入“இந்தியா”并保存,它将在 mysql db 中保存为“,e;j_ah”(我已将列字符集设置为utf8). 因此,当我获取数据并尝试打印它时,它正在打印“,e;j_ah”而不是“இந்தியா”。

谁能让我知道我在这里做错了什么?!

我用来插入字符串的代码:

textBox1 值为 'இந்தியா'(因为文本框字体设置为 'Bamini' 泰米尔语字体)

     string insertdata = "INSERT INTO tamil (country) VALUES (@cnt)";
     MySqlCommand cmd = new MySqlCommand(insertdata,connection);
     connection.Open();
     cmd.Parameters.AddWithValue("@cnt",textBox1.Text);
     cmd.ExecuteNonQuery();
     connection.Close();

受影响的数据库如下:

      tablename: Tamil
      Sno   Country
      1     ,e;j_ah

表结构:

          CREATE TABLE `tamil` (                              
            `sno` int(11) auto_increment NOT NULL,                        
            `Description` varchar(50) NOT NULL,                          
            `Country` varchar(50) character set utf8 NOT NULL,                         
            KEY `id_sno` (`sno)                             
          ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; 
4

5 回答 5

2
于 2017-08-07T17:44:45.993 回答
1

经过一长串的试验,我终于找到了在我的打印机中打印泰米尔语字符的替代解决方案。注意:硬件技术支持告诉我,许多热敏打印机不接受通过原始打印机帮助程序类发送的泰米尔语字符。

于是我设计了一份crsytal报告并尝试打印,结果立竿见影。(我的打印机是3英寸热敏打印机)

于 2017-08-12T13:13:14.413 回答
1

在连接字符串中加入如下内容:

id=my_user;password=my_password;database=some_db123;charset=utf8;

并更改DescriptionCHARACTER SET utf8(或 utf8mb4)。

更多调试请参见: http ://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored

于 2017-08-15T21:37:23.450 回答
0

字符串的 UTF-8 编码出现问题。",e;j_ah" 肯定不是你的字符串的 UTF-8 表示。我建议完全绕过数据库的 UTF-8 功能,并为您的“国家/地区”列使用简单的 BLOB 类型,该类型存储可变长度的纯字节数组。然后使用 .NET 的 UTF-8 编解码器自己编码/解码,将编码后的字节数组存储在 BLOB 列中。

所以将“国家”的声明改为:

`Country` BLOB NOT NULL,   

使用 Encoding.UTF8.GetBytes() 和 Encoding.UTF8.GetString() 对您的泰米尔语字符串进行编码/解码。

于 2017-08-06T08:18:38.630 回答
0

基本上,Bamini 不是 unicode 标准。它有自己的编码,因此每当您阅读时都需要对其进行解码,这意味着您需要在内容上设置 bamini 字体。当您尝试打印时,系统未设置为 bamini 字体。

所以解决方案应该是使用 unicode 字体而不是 bamini 或在打印时设置 bamini 字体。

于 2017-08-16T12:40:52.830 回答