У меня есть программа на C#, которая считывает данные из базы данных и выводит ее в текстовый файл.Кодирование UTF-8 при чтении из базы данных (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"));
.. .it работает отлично.
Signed 8-bit 2’s-compliment
Может ли проблема rdr[i].toString()
? Я предполагаю, что когда он преобразует объект в строку, он закручивает кодировку символа ’
, что мешает мне правильно преобразовать его в апостроф. Но я не думаю, что могу избежать использования toString()
. Итак, что мне делать?