2016-09-30 29 views
3

讀取文件時,指定編碼我有一個UTF8文件,我已經加入到我在Resources.resx的項目,叫做Template.txt從資源

如果我讀的文件通常是這樣的:

string template = File.ReadAllText(@"filepath\Template.txt", Encoding.UTF8); 

一切工作正常。

但是,如果我的理解是這樣的:

string template = Properties.Resources.Template 

它是充滿了日文字符,因而具有了錯誤的編碼。

byte[] bytes = Encoding.Default.GetBytes(Properties.Resources.Template); 
string template = Encoding.UTF8.GetString(bytes); 

這還是給出了日文字符。

有誰知道原因?如果我只是雙擊Visual Studio中的Template.txt文件,我也可以正常讀取它。

+1

您可能沒有在Resources.resx包含中指定UTF8,因此在將其轉換爲資源時出現亂碼。因此,無法將資源恢復爲無法使用。瞭解如何在Resources.resx中指定UTF8。 –

+0

如果文本出現錯誤,則表示您沒有將其存儲爲Unicode。只要確保資源實際上存儲爲Unicode –

+1

當您將文本文件作爲資源嵌入時,資源管理器會努力將文件嵌入爲文本,以便編碼不起作用。這就是爲什麼你可以從Template屬性獲得一個字符串。但是,正如你所看到的,它無法弄清楚文本文件是否包含utf8。所以它猜對了,並且使用了系統默認的代碼頁,如果文本文件包含非ASCII字符,就會變成亂碼。使用文本編輯器打開文件,甚至記事本都可以做到,將其保存爲utf8,以便包含BOM。 –

回答

0

正如Hans Passant在評論中所說的那樣,對文件進行編碼以使其包含UTF-8 BOM(字節順序標記)來解決問題。