簡體   English   中英

C#DataGrid字符編碼

[英]C# DataGrid character encoding

我的應用程序從文件中提取數據,將其拆分為幾個DataTable ,然后根據選擇在DataGrid顯示數據。 問題是,當我告訴它在DataGrid中,特殊字符似乎使用了錯誤的編碼,我得到以下征兆:

這是我獲取文件數據的方式:

using (StreamReader reader = new StreamReader(@filename, true))
{
    while (!reader.EndOfStream)
    {
        // split the data in the file on ;
        var line = reader.ReadLine().Split(';');

        // Put the data in an object for the datatable
        object[] row = new object[] { line[0], line[1] };

        // Data will be put in a DataTable without any other conversion
        table.Rows.Add(row);
    }
}

// Create reader from datatable
using (DataTableReader reader = table.CreateDataReader())
{
    // Loop through the table
    while (reader.Read())
    {
        // Create new object that will act as a row
        object[] newrow = new object[] { reader[0], reader[1] };

        // Add the row
        dataGrid.Rows.Add(newrow);
    }
}

上面的代碼可以完美地工作,並且得到了簡化。 顯然還有更多事情在進行,但沒有任何事情會影響任何編碼。 我進行了一些搜索,但似乎找不到針對此特定問題的解決方案。

注意:我不知道文件的編碼,並且每個文件的編碼可能有所不同。

在不事先知道文件編碼的情況下,最好的辦法就是猜測該編碼是什么。

我建議您閱讀這篇出色的文章: http : //www.joelonsoftware.com/articles/Unicode.html

閱讀很有趣,我個人在那里發現了一些有價值的信息/說明。

但是這篇文章的主要內容是:

不知道字符串使用什么編碼就沒有意義。


拋開理論,我知道在實踐中有時不可能問用戶他們剛提交/上傳的文件的編碼是什么。

因此,同樣,您能做的最好的就是猜測。

在我的職業生涯中,我已經處理過幾次這個問題,每次我都設法找到一個足夠好的編碼猜測算法,這取決於所開發系統的性質。

最好的辦法是獲取盡可能多的樣本文件,手動分析其編碼並查看是否可以找到模式,例如:

  • 除了使用ISO-8859-1的用戶A和B外,所有用戶均提交以UTF-8編碼的文件
  • 如果文件包含某個字節序列,則很可能是編碼為A,否則使用默認編碼B

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM