2011-01-07 75 views
1

我正在研究一个爬网程序,它可以打开文件并解析它们并将其放入数据库中。用于保存在数据库中的ANSI编码字符串

但是我有一个包含奇数字符的文件有问题,我想知道是否有任何简单的方法在将字符串放入数据库之前强制执行A​​NSI编码,所以为了确保那里是不是非法的字符。

该项目是用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场,这是从文件。

+1

不要惹这个。使dbase列类型nvarchar并立即解决所有问题。 – 2011-01-07 16:41:27

+0

db字段不是问题。 – Alxandr 2011-01-09 22:49:44

回答

1

那么将它转换,你总是可以检查字符串可以被编码,然后重新解码为相同的值:

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

调用每个文本字段之前将其保存 - 再考虑做什么,如果它失败...

有没有什么方法可以更改数据库模式以接受所有Unicode字符?这将是一个更令人愉快的方法,国际海事组织。

如果需要使用某种ANSI编码的,你应该制定出究竟其编码你的意思。有很多通常被称为“ANSI”的编码。你需要计算出你的代码页。

-1

你可以试试这个:

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

或许特别不同的编码之间用Encoding.Convert()

+1

GetString不接受一个字符串 - 它需要字节。我也强烈建议*反对*使用Encoding.Default - 它应该是一个*指定*编码,而不是系统默认情况下。这可能*不*与数据库整理相同。 – 2011-01-07 14:15:12

相关问题