0
我有一個C#程序,它從數據庫讀取數據並將其輸出到文本文件。從數據庫中讀取時的UTF-8編碼(C#)
OleDbCommand cmd = new OleDbCommand("SELECT * FROM " + tableName, conn);
OleDbDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
while (rdr.Read())
{
for (int i = 0; i < rdr.FieldCount; i++)
{
string toStr = rdr[i].ToString();
// ...etc.
其中一條線特別不斷給我帶來麻煩。這裏是什麼樣子的數據庫:
Signed 8-bit 2’s-compliment
這裏是什麼樣子在我的輸出文件:
Signed 8-bit 2’s-compliment
我想,我可以採取編碼考慮解決這個問題。所以我改變了我的代碼,將文本轉換爲UTF-8:
string toStr = Encoding.UTF8.GetString(Encoding.Default.GetBytes(rdr[i].ToString()));
,這導致:
Signed 8-bit 2�s-compliment
但是,如果我這樣做......
string toStr = Encoding.UTF8.GetString(Encoding.Default.GetBytes("Signed 8-bit 2’s-compliment"));
..它完美地工作。
Signed 8-bit 2’s-compliment
難道rdr[i].toString()
是問題嗎?我的猜測是,當它將對象轉換爲字符串時,它將’
字符的編碼擰緊,這使我無法將其正確轉換爲撇號。但我不認爲我可以避免在那裏使用toString()
。那麼我該怎麼做?