2017-08-22 1 views
0

J'essaie de convertir UTF-8 en fichiers ANSI. Avec peu de connaissances et l'aide de Google, j'ai trouvé une ligne pour convertir le fichier UNIQUEConvert UTF-8 en ANSI

Get-Content C:\Output2\PA01.094 | Set-Content C:\Output\PA01094 -Encoding Ascii 

Maintenant, je veux convertir tous les fichiers UTF-8 dans un dossier à un autre sans changer de nom de fichier.

Répondre

0

Vous pouvez utiliser du code comme ci-dessous. Modifiez Get-ChildItem comme requis pour spécifier les fichiers dont vous avez besoin.

$sourcePath = "C:\source" 
$destinationPath = "C:\output" 
if (!(Test-Path $destinationPath)) 
{ 
    New-Item -ItemType Directory -Path $destinationPath 
} 
Get-ChildItem -Path $sourcePath -File | ForEach-Object { 
Write-Host "Converting $_" 
$content = Get-Content $_.FullName 
Set-content (Join-Path -Path $destinationPath -ChildPath $_) -Encoding Ascii -Value $content 
} 

codage ASCII ne peut pas gérer tous les caractères UTF8 ou autres encodages Unicode peuvent gérer, le caractère qui ne peut pas être traduit peut entraîner? dans le fichier de sortie.

Pour vérifier le codage de la sortie, vous pouvez utiliser PowerShell. Par exemple pour un fichier texte créé dans le Bloc-notes qui dit "Hello, World!"

Les codages suivants produiront ces résultats. Remarque début de UTF-8 a des caractères spéciaux, ceux-ci indiquent que le fichier est UTF-8, pas le format d'enregistrement par défaut dans le bloc-notes.

PS C:\support> [System.IO.File]::ReadAllBytes("C:\support\helloworld_ansi.txt") 
    72 
    101 
    108 
    108 
    111 
    44 
    32 
    87 
    111 
    114 
    108 
    100 
    33 
    PS C:\support> [System.IO.File]::ReadAllBytes("C:\support\helloworld_unicode.txt") 
    255 
    254 
    72 
    0 
    101 
    0 
    108 
    0 
    108 
    0 
    111 
    0 
    44 
    0 
    32 
    0 
    87 
    0 
    111 
    0 
    114 
    0 
    108 
    0 
    100 
    0 
    33 
    0 
    PS C:\support> [System.IO.File]::ReadAllBytes("C:\support\helloworld_utf8.txt") 
    239 
    187 
    191 
    72 
    101 
    108 
    108 
    111 
    44 
    32 
    87 
    111 
    114 
    108 
    100 
    33 
    PS C:\support> 
+0

Cela écrasera les fichiers d'origine. La requête consiste à écrire des fichiers dans un autre dossier. – andyb

+0

Modifier le contenu de l'ensemble à l'endroit où vous voulez écrire les fichiers, en ajoutant l'exemple –

+0

Un peu sanglant effronté. Votre réponse initiale a raté le point de la question. Quand je le fais remarquer, tu déchires ma réponse. Agréable. – andyb

2

Ce qui suit tous les fichiers de $sourceFolder et les recréer sous $destFolder codé en ASCII.

$sourceFolder = "c:\temp\src" 
$destFolder = "c:\temp\dst" 

Get-ChildItem -Path $sourceFolder | 
    foreach-object { 
     get-content $_ | Set-content -Path (Join-Path $destFolder $_.Name) -Encoding ASCII 
    } 

N.B. Ce code NE vérifie PAS l'encodage du fichier original.