Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Никак не могу понять где ошибка "отсутствует терминатор: '." (http://forum.oszone.net/showthread.php?t=350565)

Svetik2000 26-01-2022 17:10 2978732

Никак не могу понять где ошибка "отсутствует терминатор: '."
 
Вложений: 1
День добрый.
Уже не знаю что делать. Все испробовала и не могу найти ошибку.

есть скрипт 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 2978733

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"


YuS_2 26-01-2022 18:44 2978735

Цитата:

Цитата Svetik2000
В чем может быть дело? »

судя по скрину, у Вас проблема с кодировкой скрипта...
Сохраните в UTF8 with BOM и проверьте.

DJ Mogarych 26-01-2022 20:12 2978736

Можно открыть Powershell ISE, вставить туда текст скрипта и сохранить.
Скрипты PS, по-моему, все в кодировке 1251.

Svetik2000 27-01-2022 09:47 2978762

Утро доброе.
Кодировка изначально 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 2978764

Все получилось!
Указала в конце Set-Content "$destination_file" -encoding utf8

Но вылез другой косяк... добавляет лишние символы в определенные места. даже если там не делать замены :-(
Чудеса какие то...
То есть в картинке у температуры добавляется буква В

Svetik2000 27-01-2022 10:46 2978765

Вложений: 2
Вот так выглядит выглядит в оригинале и после скрипта.
При том, что даже если убрать из массива замены Temperature - все равно там меняется
При этом, если убрать -encoding utf8, то этот лишний символ не появляется, но сплошные пробелы вместо замены.
Может есть еще какое то приложение для конвертации svg в png которое через cmd умеет работать???
Смотрю, онлайн конверторы такой же косяк выдают. и именно в тех же местах

alpap 28-01-2022 00:01 2978804

попробуйте: -Encoding UTF8BOM

Svetik2000 28-01-2022 09:25 2978818

Вложений: 1
Цитата:

Цитата alpap
попробуйте: -Encoding UTF8BOM »

Не удалось преобразовать значение "UTF8BOM" в тип "Microsoft.PowerShell..."

DJ Mogarych 28-01-2022 09:48 2978820

Цитата:

Цитата Svetik2000
добавляет лишние символы в определенные места. даже если там не делать замены »

Поставьте Powershell 7 и выполняйте скрипт из-под него.

Svetik2000 28-01-2022 10:15 2978824

Вложений: 1
Без ошибок, но вместо букв...

DJ Mogarych 28-01-2022 10:17 2978825

Выполняйте команды последовательно, разберитесь сначала с кодировкой импорта, потом переходите к экспорту.

Кодировка по умолчанию в PS 5.1 - это Windows 1251, а в PS 7 - юникод.

Svetik2000 28-01-2022 10:22 2978826

в PowerShell 7.2.1 при указание -Encoding UTF8BOM или просто UTF8 в самой svg выводит ромбики

Все получилось после того, как сам скрипт ps1 сохранила в кодировке UTF8 а не 1251 и убрала в конце -Encoding

Всем спасибо за помощь!

YuS_2 28-01-2022 17:02 2978867

Цитата:

Цитата DJ Mogarych
Скрипты PS, по-моему, все в кодировке 1251. »

А для большей универсальности, таки лучше использовать UTF8withBOM


Время: 20:17.

Время: 20:17.
© OSzone.net 2001-