Показать полную графическую версию : [решено] Никак не могу понять где ошибка "отсутствует терминатор: '."
Svetik2000
26-01-2022, 17:10
День добрый.
Уже не знаю что делать. Все испробовала и не могу найти ошибку.
есть скрипт powershell в кодировке UTF-8
$original_file = 'D:\www\site\img\weather\tmp\weather_original.svg'
$destination_file = 'D:\www\site\img\weather\tmp\weather.svg'
(Get-Content $original_file) | Foreach-Object {
$_ -replace 'Temperature', 'Температура'`
-replace 'Jan', 'Янв'`
-replace 'Wind', 'Ветер'
} | Set-Content $destination_file
При его запуске вываливается ошибка (см картинку).
В чем может быть дело?
DJ Mogarych
26-01-2022, 17:50
foreach тут вообще не нужен.
$original_file = 'D:\www\site\img\weather\tmp\weather_original.svg'
$destination_file = 'D:\www\site\img\weather\tmp\weather.svg'
(Get-Content "$original_file") `
-replace 'Temperature', 'Температура' `
-replace 'Jan', 'Янв' `
-replace 'Wind', 'Ветер' |
Set-Content "$destination_file"
В чем может быть дело? »
судя по скрину, у Вас проблема с кодировкой скрипта...
Сохраните в UTF8 with BOM и проверьте.
DJ Mogarych
26-01-2022, 20:12
Можно открыть Powershell ISE, вставить туда текст скрипта и сохранить.
Скрипты PS, по-моему, все в кодировке 1251.
Svetik2000
27-01-2022, 09:47
Утро доброе.
Кодировка изначально UTF-8
При 1251 скрипт отрабатывает без ошибок. Но вот дальше...
Приложение inkscape не конвертирует данный текст из svg в png. Просто пробелы показывает вместо текста.
В другом скрипте с кодировкой UTF-8, которая без массива для замены, а меняется только одна строчка, все отрабатывает без проблем, и замена, и дальнейшая конвертация в png
Вот его код:
$FILE = Get-Content -Path 'D:\www\sites\img\weather\tmp\weather.svg'
$NEWFILE = $FILE -replace 'Weather forecast for ****', 'Прогноз погоды в ***** на ближайшие 48 часов'
$NEWFILE | Set-Content -Path 'D:\www\sites\img\weather\tmp\weather.svg'
Выяснила, что рабочий скрипт (который одну строку заменяет) сохраняет svg в UTF-8.
Скрипт который с массивом, в UTF-8 выпадает с ошибкой. В 1251 отрабатывает без ошибок, но и svg сохраняет в 1251, а нужно получается в UTF-8.
Как бы указать кодировку при сохранение?
Svetik2000
27-01-2022, 10:42
Все получилось!
Указала в конце Set-Content "$destination_file" -encoding utf8
Но вылез другой косяк... добавляет лишние символы в определенные места. даже если там не делать замены :-(
Чудеса какие то...
То есть в картинке у температуры добавляется буква В
Svetik2000
27-01-2022, 10:46
Вот так выглядит выглядит в оригинале и после скрипта.
При том, что даже если убрать из массива замены Temperature - все равно там меняется
При этом, если убрать -encoding utf8, то этот лишний символ не появляется, но сплошные пробелы вместо замены.
Может есть еще какое то приложение для конвертации svg в png которое через cmd умеет работать???
Смотрю, онлайн конверторы такой же косяк выдают. и именно в тех же местах
попробуйте: -Encoding UTF8BOM
Svetik2000
28-01-2022, 09:25
попробуйте: -Encoding UTF8BOM »
Не удалось преобразовать значение "UTF8BOM" в тип "Microsoft.PowerShell..."
DJ Mogarych
28-01-2022, 09:48
добавляет лишние символы в определенные места. даже если там не делать замены »
Поставьте Powershell 7 и выполняйте скрипт из-под него.
Svetik2000
28-01-2022, 10:15
Без ошибок, но вместо букв...
DJ Mogarych
28-01-2022, 10:17
Выполняйте команды последовательно, разберитесь сначала с кодировкой импорта, потом переходите к экспорту.
Кодировка по умолчанию в PS 5.1 - это Windows 1251, а в PS 7 - юникод.
Svetik2000
28-01-2022, 10:22
в PowerShell 7.2.1 при указание -Encoding UTF8BOM или просто UTF8 в самой svg выводит ромбики
Все получилось после того, как сам скрипт ps1 сохранила в кодировке UTF8 а не 1251 и убрала в конце -Encoding
Всем спасибо за помощь!
Скрипты PS, по-моему, все в кодировке 1251. »
в общем случае Windows PowerShell по умолчанию использует кодировку юникод UTF-16le . однако кодировка по умолчанию, используемая командлетами в Windows PowerShell, не согласуется. (https://docs.microsoft.com/ru-ru/powershell/module/microsoft.powershell.core/about/about_character_encoding?view=powershell-5.1)
А для большей универсальности, таки лучше использовать UTF8withBOM
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.