ANSI-кодированная строка для сохранения в базе данных - PullRequest
1 голос
/ 07 января 2011

Я работаю над сканером, который открывает файлы, анализирует их и помещает содержимое в базу данных.

Однако у меня была проблема с файлами, которые содержат нечетные символы, и мне было интересно, есть ли какой-нибудь простой способ принудительного ANSI-кодирования строки перед тем, как поместить ее в базу данных, чтобы убедиться в нет незаконных символов.

Проект написан на C #, и код, который я использую для добавления материала в базу данных, выглядит следующим образом:

cmd = new OleDbCommand("INSERT INTO TaIndex (IndexId, IndexTekst, IndexDato, IndexModulId, IndexModul, IndexFilsti) VALUES (?, ?, ?, ?, ?, ?);", conn);
cmd.Parameters.Add("IndexId", OleDbType.Integer).Value = newIdGetter();
cmd.Parameters.Add("IndexTekst", OleDbType.LongVarChar).Value = Text;
cmd.Parameters.Add("IndexDato", OleDbType.Date).Value = DateTime;
cmd.Parameters.Add("IndexModulId", OleDbType.VarChar).Value = ModuleId;
cmd.Parameters.Add("IndexModul", OleDbType.VarChar).Value = Module;
cmd.Parameters.Add("IndexFilsti", OleDbType.VarChar).Value = ((object)FilePath) ?? DBNull.Value;

Проблема с полем IndexTekst, которое приходит из файлов.

Ответы [ 2 ]

1 голос
/ 07 января 2011

Ну, вы всегда можете проверить, что строка может быть закодирована и затем повторно декодирована до того же значения:

public static bool CanBeRoundTripped(Encoding encoding, string text)
{
    byte[] bytes = encoding.GetBytes(text);
    string decoded = encoding.GetString(bytes);
    return text == decoded;
}

Вызовите это в каждом текстовом поле перед его сохранением - и затем подумайте, что делатьесли это не удается ...

Есть ли способ изменить схему базы данных, чтобы она принимала все символы Юникода?Это было бы гораздо более приятным подходом, IMO.

Если вам нужно нужно использовать какую-то кодировку ANSI, вы должны определить точно какую кодировку вы имеете в виду,Существует множество кодировок, которые обычно называются «ANSI».Вам нужно решить, какую кодовую страницу вы имеете в виду.

0 голосов
/ 07 января 2011

Вы можете попробовать это:

cmd.Parameters.Add("IndexTekst", OleDbType.LongVarChar).Value = Encoding.Default.GetString(Text);

Или, может быть, специально преобразовать его между различными кодировками с помощью Encoding.Convert()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...