2016-07-22 2 views
1

Я запускаю сценарий powershell на файлах XML рекурсивно для поиска и замены текста. Код работает отлично с поиском и заменой текста. Однако в некоторых файлах есть текст других языков, например fréquentes, который меняется после frà © quentes после запуска скрипта. Я использую кодировку UTF8 в скрипте. Любые указатели на то, как сохранить загрузку?проблема с кодировкой в ​​поиске и замене powershell

$content| Foreach-Object{$_ -replace 'test1' , 'testing'` 
          -replace 'test2' , 'testing' }| Out-File file.FullName -Encoding utf8 

ответ

2

Вы, кажется, игнорируя кодировку XML-файл, который, кажется, Latin файлов 1. XML определить их кодировку в начале (или, если их нет, то они будут автоопределение, как UTF-8, UTF-16 или UTF-32):

<?xml version='1.0' encoding='utf-8'?> 

Так что мне кажется, как вы читаете содержание с правильным кодированием, но записать файл в кодировке UTF-8, который не соответствует заявленному один.

Вы можете использовать API для XML, чтобы изменить файл, который может быть предпочтительным, или просто изменить ваш Out-File к

Out-File -Encoding Default 

Однако, что может привести кодирование отличаться между различными компьютерами, так тщательно с этим. Я в значительной степени использую его только для файлов, которые, как я знаю, находятся в устаревшей кодовой странице системы или для быстрых одноразовых скриптов.

+0

Спасибо за ваш ответ. Использование его для работы по умолчанию. Мой XML-файл имеет в нем следующее: вот почему я пытался использовать utf8 в скрипте. Использует ли по умолчанию ту же самую кодировку, которая уже существует в файле XML, или изменить файл XML по умолчанию из utf-8 – user2628187

+0

'Default' означает использовать устаревшую кодовую страницу системы, поэтому, как правило, это такая плохая идея. Эта кодировка существует только для обслуживания приложений, отличных от Юникода, но текстовые файлы часто также входят в эту кодировку. Если XML-файл * по праву * объявляет UTF-8, то код, который вы отправили, ничего не должен навредить. Другой вариант, чтобы избежать этого, если ваши замены не содержат символы, отличные от ASCII, будет просто использовать значение по умолчанию для чтения * и * записи. Таким образом, все, что не является ASCII, просто передается (если вы используете 8-битную устаревшую кодовую страницу, большинство из них). – Joey

Смежные вопросы