将UTF-8转换为ANSI

时间:2017-08-22 23:11:22

标签: powershell character-encoding

我正在尝试将UTF-8转换为ANSI文件。通过Google的一点知识和帮助,我找到了一行来转换SINGLE文件

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

现在我想将文件夹中的所有UTF-8文件转换为另一个文件夹而不更改文件名。

2 个答案:

答案 0 :(得分:2)

以下内容将读取1中的所有文件,并在编码为ASCII的$sourceFolder下重新创建。

$destFolder

N.B。此代码不会验证原始文件的编码。

答案 1 :(得分:0)

您可以使用以下代码。根据需要修改Get-ChildItem以指定所需的文件。

$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
}

ASCII编码无法处理UTF8或其他Unicode编码可以处理的所有字符,无法翻译的字符可能会导致?在输出文件中。

要检查输出的编码,可以使用PowerShell。

例如,在记事本中创建的文本文件中显示" Hello,World!"

以下编码将产生这些结果。注意UTF-8的启动有特殊字符,这些表示文件是UTF-8,而不是记事本中的默认保存格式。

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>