【发布时间】:2016-05-13 20:04:40
【问题描述】:
我有一个从数据库读取数据并将其输出到文本文件的 C# 程序。
OleDbCommand cmd = new OleDbCommand("SELECT * FROM " + tableName, conn);
OleDbDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
while (rdr.Read())
{
for (int i = 0; i < rdr.FieldCount; i++)
{
string toStr = rdr[i].ToString();
// ...etc.
特别是一行一直给我带来麻烦。这是它在数据库中的样子:
Signed 8-bit 2’s-compliment
这是我的输出文件中的样子:
Signed 8-bit 2’s-compliment
我想我可以通过考虑编码来解决这个问题。所以我更改了代码以将文本转换为 UTF-8:
string toStr = Encoding.UTF8.GetString(Encoding.Default.GetBytes(rdr[i].ToString()));
结果:
Signed 8-bit 2�s-compliment
但是,如果我这样做......
string toStr = Encoding.UTF8.GetString(Encoding.Default.GetBytes("Signed 8-bit 2’s-compliment"));
...完美运行。
Signed 8-bit 2’s-compliment
rdr[i].toString() 可能是问题所在吗?我的猜测是,当它将对象转换为字符串时,它会破坏’ 字符的编码,这使我无法将其正确转换为撇号。但我认为我不能避免在那里使用toString()。那我该怎么办?
【问题讨论】:
标签: c# database encoding utf-8