Как считать данные из БД SQLite с корректной кодировкой?

программирование база данных кодировка SQLite utf8

С помощью sqliteadmin создал БД, забил туда табличку, состояющую из двух полей. Забил в эту таблицу данные - id и контент некоторый на русском языке.

Пытаюсь получать данные таким образом:

private void btTestConnection_Click(object sender, EventArgs e)
{
StringBuilder builder = new StringBuilder();
DataTable table = ExecuteQuery("SELECT * FROM ComInstructions");
foreach (DataRow row in table.Rows)
{
var bytes = Encoding.GetEncoding(866).GetBytes(row["Instruction"].ToString());
builder.Append(Encoding.ASCII.GetString(bytes));
}

textBox1.Text = builder.ToString();
}


Но данные отображаются вопросами. Открывал файл БД в notepad, там показана кодировка ANSI (win-1251), хотя по сути БД на SQLite создается с использование кодировки UTF-8.

Как мне получить мою строку в корректном виде?

Примечание:
1. "Это будет глупый вопрос, но перед тем как писать непонятную возню с кодировками Вы пробывали просто сделать так: row["Instruction"].ToString()?"

Я бы и не делал непонятную возню с кодировками, если бы не попробовал именно эту строчку вывести! Выводит черные ромбы.
Метод ToString() преобразует объект в кодировку по умолчанию utf-16le.

2. Выдает все корректно, что и следовало ожидать: "hello my name is wa"

Попробовал создать новую БД с другой кодировкой UTF-16le. Получилось создать. Но запихнув туда русские буквы, уже в самом administrator в результатах были кракозябры. В программе тоже выдавало краказябры.

Примечание:
Скорее всего проблема в администраторе.
Попробовал создать БД программно, забил таблицу, поля, данные с русскими буквами. Правда базу создал с кодировкой UTF-16le.

Выполнил код:
private void btTestConnection_Click(object sender, EventArgs e)
{
StringBuilder builder = new StringBuilder();
DataTable table = ExecuteQuery("SELECT * FROM Instructions");
foreach (DataRow row in table.Rows)
{
builder.Append(row["fld"].ToString());
}

textBox1.Text = builder.ToString();
}

В textBox появилась русская надпись.=) победа. Вроде бы вопрос закрыт (надеюсь не будет казусов с русским больше).
Ответы:
Это будет глупый вопрос, но перед тем как писать непонятную возню с кодировками Вы пробывали просто сделать так: row["Instruction"].ToString()?
попробуй просто в консольной аппликации C# чтоб он делал "SELECT * FROM ComInstructions" и выдавал тебе надпись оттуда из бд на английском на консоль. Работает?
Вы уверенны, что текст в базу занесён правильно? Попробуйте открыть базу с помощью SQLite Expert Personal.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.