msbuild带有特殊字符的writelinestofile

时间:2016-01-11 16:25:53

标签: encoding msbuild

我正在连接AfterBuild任务中的文件集合。我通过以下方式阅读每个文件:

<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)但没有成功。

1 个答案:

答案 0 :(得分:0)

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

为了改变编码,我找到了两种方法。一个是在Visual Studio中打开文件,并通过File =&gt;更改编码高级保存选项。

以下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)
    );