2010-01-06 66 views
4

好的,所以我基本上試圖加載一個.txt文件的內容,每行包含1個單詞到字典中。C#:使用英文以外的語言字典的問題

當這個文件中的文字是英文的時候,我沒有任何問題,但是把文件改成帶重音符的語言,我開始有問題了。

必須在創建流式閱讀器時更改編碼,同時將該單詞添加到字典中,同時還要使用ToLower方法中的文化。

基本上我現在有一些與此類似:

if (!dict.ContainsKey(word.ToLower(culture))) 
    dict.Add(word.ToLower(culture), true); 

的問題是,像「ESTA」和「ESTA」字被認爲是相同的。那麼,是否有任何方法將ContainsKey方法設置爲特定語言,或者我們是否需要按照可比較的方式實現某些內容?無論哪種方式,我有點新的C#所以我會apreciate示例請。

另一個問題淹沒在新文件中......在像一百字之後,它停止添加文件的其餘部分,留下一個字不完整......但我無法看到該字中的任何特殊字符以結束執行該方法,關於這個問題的任何想法?

非常感謝。

編輯: 第一個問題使用Jon Skeet消解解決。

關於第二個問題: 好吧,將文件格式更改爲UTF8,並刪除流讀取器中的編碼,因爲它現在可以識別恰好正確的重音。現在測試一些關於第二期的內容。

第二個問題也解決了,這是我的一個錯誤...恥辱...

Thnks的快速解答大家,尤其是喬恩斯基特。

+0

如果您在比較時遇到問題,那麼在字典中,您將遇到散列碼生成器的問題,這意味着兩個不同的字符串將具有相同的散列碼。我不知道這是否肯定會證明是一個問題,但我希望你會發現訪問字典會證明是有問題的。爲什麼你使用字典作爲存儲有什麼特別的原因?也許一個自定義的數據結構會更有意義。 – 2010-01-06 12:09:52

回答

7

我假設你試圖讓字典不區分大小寫。不要調用ToLower,而要使用構造函數Dictionary,它使用相等比較器 - 並使用StringComparer.Create(culture, true)來構造合適的比較器。

我不知道你的第二個問題是什麼 - 我們需要更多的細節來診斷它,包括你正在使用的代碼,理想情況。

編輯:UTF-7幾乎肯定是而不是的正確編碼。不要只是猜測編碼;找出它的真正意義。這個文本文件從哪裏來的?你能成功打開它什麼?

我懷疑至少有一些問題是由於使用UTF-7造成的。

+0

非常感謝,加入了StringComparer.Create(culture,true)解決了我的第一個問題。 第二個仍然存在,即使用UTF-7,因爲UTF-8或ASCII編碼都不能識別該重音。 – brokencoding 2010-01-06 12:20:00

1

問題在於打開文件時要使用的引用。看起來你可能正在使用ASCIIEncoding。

.NET在內部將字符串處理爲UTF-8,所以這種問題不會發生在內部。

+0

我不知道是否編碼進入它,直到你嘗試序列化/反序列化字符串/字符數據。 .net如何在內部處理字符串應該沒有這種編碼問題,並且不受開發人員的關注。 – spender 2010-01-06 12:09:35

+1

@spender:讀取文本文件*是*反序列化字符數據。用於此的編碼必須正確,否則數據將被損壞。 – 2010-01-06 12:26:44

+0

@Jon:我沒有說清楚這是我評論這個答案的第二段。 – spender 2010-01-06 12:33:37