从资源中读取文件时指定编码

时间:2016-09-30 11:18:16

标签: c# .net

我有一个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文件,我也可以正常阅读它。

3 个答案:

答案 0 :(得分:1)

正如Hans Passant在评论中所说,编码文件使其包含UTF-8 BOM(字节顺序标记)修复了问题。

答案 1 :(得分:1)

在VS中,选择Resources.resx文件,然后转到File > Save Resources.resx As...

Save with Encoding...,然后选择Unicode(UTF-8 without signature) - Codepage 65001OK

答案 2 :(得分:0)

.resx文件中描述的可能是编码。

使用记事本打开.resx文件,您会注意到一些类似于以下内容的条目:

  <data name="file1" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\Resources\file1.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
  </data>
  <data name="file2" type="System.Resources.ResXFileRef, System.Windows.Forms">
    <value>..\Resources\file2.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
  </data>

您可以将Windows-1252更改为utf-8并保存。