我正在开发一个可以打开文件并解析它们并将内容放入数据库的爬虫程序。
但是我对包含奇数字符的文件有问题,我想知道在将其放入数据库之前是否有任何简单的方法来强制执行字符串的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-field,它来自文件。
答案 0 :(得分:1)
好吧,您可以随时检查字符串是否可以编码,然后重新解码为相同的值:
public static bool CanBeRoundTripped(Encoding encoding, string text)
{
byte[] bytes = encoding.GetBytes(text);
string decoded = encoding.GetString(bytes);
return text == decoded;
}
在保存之前在每个文本字段上调用它 - 然后考虑如果失败了该怎么做...
有什么方法可以更改数据库架构以接受所有Unicode字符吗?这将是一个更令人愉快的方法,IMO。
如果你做需要使用某种ANSI编码,你应该完全你的意思是哪种编码。有许多编码通常称为“ANSI”。你需要找出你的意思。
答案 1 :(得分:-1)
你可以试试这个:
cmd.Parameters.Add("IndexTekst", OleDbType.LongVarChar).Value = Encoding.Default.GetString(Text);
或者可以使用Encoding.Convert()