2011-10-13 65 views
0

我有一個文件,我需要導入。 問題是我在該文件中有很多字符存在問題。在C#中的字符串編碼 - 奇怪的字符

例如,這些名字都是錯誤的:

Björn(文件) - 應該是比約恩

Ã...科(文件) - 應該是阿克

不幸的是,我無法用正確的編碼重新創建文件。 也有很多字符是錯誤的(這些只是例子)。我無法進行搜索並全部替換(如果沒有包含所有轉換的字典)。

我能以某種方式解碼字符串嗎?

感謝帕特里克

編輯: 只是,我之前添加(我責怪我疲倦)一些更多的信息。 該文件是一個.xlsx文件。

+0

UTF-8?我不知道我是否理解你的問題:1)你知道*使用哪種編碼,不知道如何在.NET中使用它或2)你是否在尋找一種方法來確定編碼? –

+1

您可以嘗試將該文件另存爲Unicode。記事本,文件另存爲,選擇unicode。如果以前使用錯誤的編碼保存了文件,則他們將使用正確的編碼重新發送文件。 Unincode將會是首選,因爲所有角色都會在那裏。同樣的嘗試打開,正確的編碼應該被用來打開和讀取文件,否則不是所有的字符都可以被讀入。 –

回答

4

我用Notepad ++調試了這個。我將正確的字符串複製到Notepad ++中。我使用編碼|轉換爲UTF-8。然後我選擇了Encoding |編碼爲ANSI。這具有將UTF-8字節解釋爲ANSI的效果。而當我這樣做時,我最終會得到與你一樣的錯誤價值。很明顯,當你閱讀你正在解釋的文件是ANSI而不是UTF-8。

然後解決方案是您的文件已被編碼爲UTF-8。確保文件在讀取時被解釋爲UTF-8。我不能告訴你如何做到這一點,因爲你並沒有展示你如何在第一時間閱讀文件。

您的文件可能不包含byte-order-mark (BOM)。如果是,則在通過傳遞Encoding.UTF8來讀取文件時指定編碼。

+0

非常感謝。你解決了我的問題!在Excel中,文件中的字符看起來不正確(正如我前面所述),並且當我使用Linq將內容導入Excel時。我將文件(在Excel中)保存爲普通文本文件,現在這些字符是正確的。 – PKK

0

我剛剛試過你的第一個例子,它絕對看起來像是UTF-8。

目前還不清楚你用什麼來查看文件,但如果你用一個文本編輯器加載它,它理解UTF-8和告訴它是一個UTF-8文件,它應該沒事的。

當您使用.NET加載它時,您應該只能使用File.OpenText,File.ReadAllText等 - 大多數處理.NET編碼的IO都默認爲UTF-8。

+0

這可能是一個沒有BOM的UTF-8文件 –