Как сохранить UTF-8 в пакете для CSV-файла? - PullRequest
0 голосов
/ 30 апреля 2019

Привет, сообщество Stackoverflow!

У меня есть файл .csv с некоторыми значениями "{Null}" и "Null".Я использую командный файл (.cmd) с функцией PowerShell, чтобы заменить эти значения на «».Проблема в том, что выходной файл имеет другую кодировку (utf-16le), чем входной (UTF-8).Есть ли способ сохранить исходную кодировку?

powershell -Command "(gc myfile.csv) -replace '{NULL}', '' | Out-File myfile_replaced.csv"

Я попытался найти решение и понял, что Блокнот по умолчанию имеет кодировку UTF-16le.Теоретически я мог бы изменить кодировку Notepad ++, но это не вариант, так как код должен передаваться другим.

И это должно быть реализовано в пакетном режиме, в противном случае я мог бы вручную искать и заменять значения.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

К сожалению, out-file или ">" или ">>" по умолчанию имеют кодировку "unicode" или utf16.Вы можете даже смешать две кодировки в одном файле с ">>" или "out-file -append".Вместо этого вы можете использовать set-content или "out-file -encoding utf8".На самом деле set-content по умолчанию использует ANSI-кодирование.Но без специальных символов это будет то же самое, что и utf8 (без bom), или вы можете использовать опцию -encoding с set-content.Блокнотом по умолчанию является ANSI, но он может распознавать utf8 или Unicode даже без подписи или кодировки.

powershell -Command "(gc myfile.csv) -replace '{NULL}', '' | set-content myfile_replaced.csv"
0 голосов
/ 30 апреля 2019

Out-File поддерживает использование -Encoding в качестве параметра. Это справедливо и для других командлетов, которые записывают файлы (например, Export-Csv).

Согласно документации:

-Encoding

Указывает кодировку для экспортированного файла CSV. Значением по умолчанию является UTF8NoBOM.

Допустимые значения для этого параметра:

  • ASCII: используется кодировка для набора символов ASCII (7 бит).
  • BigEndianUnicode: кодирует в формате UTF-16, используя порядок байтов с прямым порядком байтов.
  • OEM: используется кодировка по умолчанию для MS-DOS и консольных программ.
  • Unicode: кодирует в формате UTF-16, используя порядок байтов с прямым порядком байтов.
  • UTF7: кодирует в формате UTF-7.
  • UTF8: кодирует в формате UTF-8.
  • UTF8BOM: кодирует в формате UTF-8 с меткой порядка байтов (BOM)
  • UTF8NoBOM: кодирует в формате UTF-8 без метки порядка байтов (BOM)
  • UTF32: кодирует в формате UTF-32.

Начиная с PowerShell 6.2, параметр Encoding также позволяет использовать числовые идентификаторы зарегистрированных кодовых страниц (например, -Encoding 1251) или строковые имена зарегистрированных кодовых страниц (например, -Encoding "windows-1251"). Для получения дополнительной информации см. Документацию .NET для Encoding.CodePage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...