2015-11-26 5 views
2

Мне нужно изменить существующий файл JSON с кодировкой UTF8 с помощью PowerShell. Я попытался с помощью следующего кода:Измените файл JSON с помощью PowerShell без записи спецификации

$fileContent = ConvertFrom-Json "$(Get-Content $filePath -Encoding UTF8)" 
$fileContent.someProperty = "someValue" 
$fileContent | ConvertTo-Json -Depth 999 | Out-File $filePath 

Это добавляет BOM к файлу, а также кодирует его в UTF16. Возможно ли, чтобы ConvertFrom-Json и ConvertTo-Json не выполняли кодирование/спецификацию?

ответ

6

Это не имеет никакого отношения к ConvertTo-Json или ConvertFrom-Json. Кодирование определяется командлетом вывода. Out-File по умолчанию - Unicode, Set-Content - ASCII. С каждым из них желаемое кодирование может быть определена в явном виде:

... | Out-File $filePath -Encoding UTF8 

или

... | Set-Content $filePath -Encoding UTF8 

Это будет еще написать (UTF8) BOM в выходной файл, но я не считаю UTF8 кодирование без спецификации в любом случае.

Если вы хотите ASCII-кодированных выходных файлов (без BOM) заменить UTF8 с Ascii:

... | Out-File $filePath -Encoding Ascii 

или

... | Set-Content $filePath  # Ascii is default encoding for Set-Content 
+0

Спасибо! Дело в том, что спецификация [JSON spec] (http://tools.ietf.org/html/rfc4627#section-3) требует кодировки Unicode, но не поддерживает спецификацию –

+1

. Спецификация обрабатывается командлетом, который записывает/записывает файл , –

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