2016-01-11 4 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. Специальные символы правильно написаны, если исходные файлы кодируются с использованием utf-8 (кодовая страница 65001) и Encoding="utf-8" в задаче WriteLinesToFile.

Чтобы изменить кодировку, я нашел два пути. Один открывает файл в 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) 
    ); 
Смежные вопросы