我有一个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文件,我也可以正常阅读它。
答案 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 65001
和OK
。
答案 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并保存。