2016-01-11 187 views
0

我连接了AfterBuild任务中的一组文件。我通过阅读每个文件:带有特殊字符的msbuild writelinestofile

<ItemGroup> 
     <FileContents Include="$([System.IO.File]::ReadAllText(%(InputFiles.Identity)))" /> 
</ItemGroup> 

然后用WriteLinesToFile任务写它:

<WriteLinesToFile File="@(OutputFile)" Lines="@(FileContents)" Overwrite="true" Encoding="utf-8" /> 

但特殊字符ñ没有被正确地写入到输出文件。我尝试了几种编码(Unicode,windows-1251,iso-8859-2),但都没有成功。

回答

0

问题在于源文件的编码。他们正在使用windows-1252。 如果在WriteLinesToFile任务中使用utf-8(代码页65001)和Encoding="utf-8"对源文件进行编码,则会正确写入特殊字符。

为了改变编码我找到了两种方法。一种是在Visual Studio中打开文件并通过File => Advanced Save Options更改编码。

以下C# script改变编码给定目录下的所有文件:

new DirectoryInfo("path/to/files/") 
    .EnumerateFiles("*", SearchOption.AllDirectories) 
    .Select(f => f.FullName) 
    .ToList() 
    .ForEach(file => 
     File.WriteAllText(
      file, 
      File.ReadAllText(file), 
      Encoding.UTF8) 
    );