msbuild writelinestofile 具有特殊字符

msbuild writelinestofile with special characters

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

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

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

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