Modification de L'encodage par défaut de la sortie de PowerShell en UTF-8
par défaut, lorsque vous redirigez la sortie d'une commande vers un fichier ou la pipez dans quelque chose d'autre dans PowerShell, L'encodage est UTF-16, ce qui n'est pas utile. Je suis à la recherche pour le changer en UTF-8.
on peut le faire au cas par cas en remplaçant le >foo.txt syntaxe | out-file foo.txt -encoding utf8 mais c'est gênant d'avoir à répéter à chaque fois.
la façon persistante de placer les choses dans PowerShell est de les mettre dans UsersmeDocumentsWindowsPowerShellprofile.ps1 j'ai vérifié que ce fichier est en fait exécuté sur démarrage.
il a été dit que le codage de sortie peut être défini avec $PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'} mais j'ai essayé et ça n'a eu aucun effet.
https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/ qui parle de $OutputEncoding regarde à première vue comme s'il devait être pertinent, mais ensuite il parle de sortie encodée en ASCII, ce qui n'est pas ce qui se passe réellement.
comment paramétrer PowerShell pour utiliser UTF-8?
1 réponses
PSv5.1 ou plus, où
>et>>effectivement aliasOut-Filevous pouvez définir le codage par défaut pour>/>>/Out-Filevia le$PSDefaultParameterValuesvariable de préférence:$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
PSv5.0 ou moins ne peut pas changer l'encodage pour
>/>>, mais PSv3 ou supérieur, la technique ci-dessus fonctionne pour appels àOut-File.
(Le$PSDefaultParameterValuesla variable de préférence a été introduite dans PSv3.0).PSv3.0 ou plus, si vous voulez définir le codage par défaut pour applets de commande de support
-Encodingparamètre (qui dans PSv5.1 + includes>et>>), utilisation:$PSDefaultParameterValues['*:Encoding'] = 'utf8'
Si vous placez cette commande dans votre $PROFILE, des applets de commande exemple Out-File et Set-Content utilisera L'encodage UTF-8 par défaut, mais notez que cela en fait un session-paramètre global qui affectera toutes les commandes / scripts qui ne spécifient pas explicitement un encodage.
de Même, assurez-vous d'inclure de telles commandes dans vos scripts ou modules que vous voulez à se comporter de la même manière, de sorte qu'ils se comportent effectivement de la même façon même lorsqu'ils sont exécutés par un autre utilisateur ou une autre machine.
Avertissement: PowerShell, à partir de v5.1,invariablement crée des fichiers UTF-8 avec un (pseudo) de la NOMENCLATURE, qui est d'usage que dans le Windows - Unix - les utilitaires basés ne reconnaissent pas ce BOM (voir bas.)
automatique $OutputEncoding variable sans rapport avec, et ne s'applique qu'à la façon dont PowerShell communique avec programmes externes (ce qu'encoding PowerShell utilise lorsqu'il leur envoie des chaînes) - cela n'a rien à voir avec l'encodage que les opérateurs de redirection de sortie et les cmdlets PowerShell utilisent pour sauvegarder dans les fichiers.
lecture optionnelle: la plateforme transversale perspective:
PowerShell est maintenant de la croix-plate-forme, par l'intermédiaire de son PowerShell Core édition, dont l'encodage - raisonnablement - par défaut à BOM-less UTF-8, en ligne avec les plates-formes de type Unix.
cela signifie que les fichiers de code source sans BOM sont supposés être UTF-8, et en utilisant
>/Out-File/Set-Contentpar défaut à BOM-less UTF-8; Utilisation explicite deutf8-Encodingargument crée BOM-less UTF-8, mais vous pouvez choisir de créer des fichiers le pseudo-BOM avec leutf8bomvaleur.si vous créez des scripts PowerShell avec un éditeur sur une plateforme de type Unix et même de nos jours sur Windows avec des éditeurs multiplateformes comme Visual Studio Code et Sublime Text, le résultat
*.ps1le fichier sera généralement UTF-8 pseudo-BOM:- Cela fonctionne bien sur PowerShell Core.
- Il peut casser sur Windows PowerShell, si le fichier contient des caractères non-ASCII; Si vous devez utiliser des caractères non-ASCII dans vos scripts, enregistrez-les comme UTF-8 avec BOM.
Sans le BOM, Windows PowerShell (mis)interprète votre script comme étant encodé dans l'ancienne page de Code "ANSI" (déterminée par la locale du système pour pré-Unicode; par exemple, Windows-1252 sur les systèmes US-English).
à L'inverse, les fichiers qui ont le pseudo-BOM UTF-8 peut être problématique sur les plateformes de type Unix, car ils provoquent des utilitaires Unix tels que
cat,sedetawk- et même certains éditeurs tels quegedit- passer le pseudo-BOM à travers, c'est à dire, de la traiter comme .- ceci peut ne pas toujours être un problème, mais peut certainement être, comme lorsque vous essayez de lire un fichier en une chaîne de caractères
bashavec, par exemple,text=$(cat file)outext=$(<file)- la variable résultante contiendra le pseudo-BOM comme les 3 premiers octets.
- ceci peut ne pas toujours être un problème, mais peut certainement être, comme lorsque vous essayez de lire un fichier en une chaîne de caractères