изменить кодировку из вывода сторонних приложений в PowerShell - PullRequest
0 голосов
/ 19 октября 2018

Контекст: я использую pg_dump.exe для автоматизации резервного копирования моей базы PostgreSQL.Я начал писать командный файл для выполнения в командной строке, но я пытался отформатировать текущую дату и время, чтобы передать его в имя файла резервной копии.По этой причине я решил перейти на PowerShell.

Проблема: Когда я выполнял pg_dump из командной строки, вывод выводился правильно: моя локаль французская, и на скриншоте ниже видно, что вывод корректенотформатированы, более конкретно, символы с акцентом, такие как é, è и т. д., правильно напечатаны.

enter image description here

Но при выполнении того же в PowerShell акцентированныесимволы перепутаны:

enter image description here

Я уже переключил выходную кодировку PowerShell на UTF-8 (см. мой код ниже), но это не решаетвопрос.

мой код:

#--------------------------------#
# script pour réaliser des sauvegardes automatiques de la base SQL
# Robin Bourgeon octobre 2018
#--------------------------------#
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding

$app = 'C:\Program Files\PostgreSQL\9.5\bin\pg_dump.exe'
$args = @('--file=C:\Users\rbourgeon\Desktop\test_backup_psql\backup_test.backup','--format=c','--no-owner','--verbose','--no-privileges','--dbname=base_test_sauvegarde','--host=localhost','--port=5432',
'--username=postgres','--no-password','--role=postgres','--clean','--if-exists')
& $app $args 2>&1 | %{ "$_" }

1 Ответ

0 голосов
/ 19 октября 2018

Ресурсы

В соответствии с первым потоком вывод консоли работает немного странно, но вот какизмените его кодировку:

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("ISO-8859-1")

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

Затем я бы предложил передать вывод вфайл и управление кодированием в этой точке.

[System.IO.File]::WriteAllText("\\path\to\file", $_, [System.Text.Encoding]::GetEncoding("ISO-8859-1"))

Это, очевидно, неоптимально ...

MWE

$Latin1 = [System.Text.Encoding]::GetEncoding("ISO-8859-1")
[Console]::OutputEncoding = $Latin1

$Output = @"
Les Représentants du Peuple Français, constitués en Assemblée Nationale, considérant que l'ignorance, l'oubli ou le mépris des droits de l'Homme sont les seules causes des malheurs publics et de la corruption des Gouvernements, ont résolu d'exposer, dans une Déclaration solennelle, les droits naturels, inaliénables et sacrés de l'Homme, afin que cette Déclaration, constamment présente à tous les Membres du corps social, leur rappelle sans cesse leurs droits et leurs devoirs ; afin que les actes du pouvoir législatif, et ceux du pouvoir exécutif, pouvant être à chaque instant comparés avec le but de toute institution politique, en soient plus respectés ; afin que les réclamations des citoyens, fondées désormais sur des principes simples et incontestables, tournent toujours au maintien de la Constitution et au bonheur de tous.
"@

Write-Host $Output

[System.IO.File]::WriteAllText("test.txt", $Output, $Latin1)

Вывод

PowerShell v5

Les Représantsants du Peuple Français, член Национальной ассамблеи, член Совета Европы, «Люблю тебя из рук в руки»«Homme sont les seules вызывает общественное недовольство и коррупцию в правительстве, он-лайн».проблемка, даны и слова, соленнелль, природа, наследие, святые дома, афиняне, семья, социальная жизнь, жизнь в обществе.et leurs devoirs;афиня де ле де ду пууар леГислатиф и т. д. шу дю пууар экзекутив, путивант мэтр чак мгновенное сравнение, но де-факто политическая институция, энтузиаст плюс и уважение;афинские королевские синагоги, фонды и принципы, простые и непростые, турниры, посвященные Конституции и тенге.

PowerShell Core v6

Les Représentants du Peuple Français, член Национальной ассамблеи, член Совета директоров, Комитет по правам человека и женщин, вызывающий недовольство общественности и коррупцию в правительстве, и так далее.Резолюция d'exposer, dans und Déclaration solennelle, les droits naturels, inaliénables et sacrés de l'Homme, afin que cette Déclaration, представление о социальном статусе, социальное, социальное и социальное обеспечение;по-французски, по-французски, по-французски, по-французски, в сравнении с политикой институтов, в том числе и с уважением;Во всех случаях, когда речь идет о воззваниях граждан, фондах и принципах простоты и неопровержимости, о том, как проходит конституция и конституция.

Выходной файл

LesПредставители французского общества, Национальная ассамблея, член Совета юстиции и полиции, выступающие в защиту прав человека, и представители государственной власти и коррупции в правительстве, а также в судебном порядке.Déclaration solennelle, les droits naturels, inaliénables et sacrés de l'Homme, afin que cette Déclaration, представление о социальном положении, социальный и социальный интерес;по-французски, по-французски, по-французски, по-французски, в сравнении с политикой институтов, в том числе и с уважением;После всех воззваний граждан, фонд отдыха и принципов простоты и неопровержимости, турне, основанное на Конституции и доброй воле.

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