2011-01-07 43 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

相關問題