【发布时间】:2018-01-13 17:34:08
【问题描述】:
您好,我开发了一个 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 ;
【问题讨论】:
-
您是否调试并检查过您从文本框中检索的字符串是否具有正确的数据?我建议记录字符串中每个字符的 UTF-16 值 - 例如,
foreach (char c in text) { Console.WriteLine(((ushort) c).ToString("x4")); } -
接下来,请向我们展示您用于将数据保存到数据库的代码。
-
在将其用作 Unicode 字符之前,您可能必须对 DB 列中的字节流进行 UTF-8 解码。
-
@user6060561:我尝试进行编码,但打印机中的输出仍然相同。 Encoding.UTF8.GetString(Encoding.GetEncoding(1252).GetBytes(countryname))
-
再看一遍,我发现存储的字符串 ",e;j_ah" 不是您的文本的 UTF-8 表示,因此它没有正确地 UTF-8 解码。您的数据库中有其他列类型选项吗?
标签: c# mysql unicode printing tamil