【发布时间】:2020-12-20 03:58:58
【问题描述】:
我们有一些摘录从不同的系统发送给我们。编码不断变化。我们需要在内部保持这一点。编写了一个 PowerShell 脚本以将编码更改为 UTF-8。但是重音字符发生了变化。名称 Denaè 更改为 Denaè 我想保留名称为 Denaè 吗?任何帮助将不胜感激。
我想使用 PowerShell 将文件更改为 UTF-8,但重音字符不变。有可能吗?
冯普瑞兹
这是我现在拥有的代码
$Source = 'C:\Source'
$Destination = 'C:\Destination'
$Utf8NoBomEncoding = 新对象 System.Text.UTF8Encoding($False)
移除项目 $Destination -Recurse -Force
foreach ($i in Get-ChildItem $Source -Recurse -Force) { 如果($i.PSIsContainer){ 继续 }
$path = $i.DirectoryName.Replace($Source, $Destination)
$name = $i.Fullname.Replace($Source, $Destination)
if ( !(Test-Path $path) ) {
New-Item -Path $path -ItemType directory
}
$content = get-content $i.Fullname
if ( $content -ne $null ) {
[System.IO.File]::WriteAllLines($name, $content, $Utf8NoBomEncoding)
} else {
Write-Host "No content from: $i"
}
}
【问题讨论】:
-
替换
è -> è看起来像文件被转换为纯文本,所以它不再是 Unicode。使用minimal reproducible example 显示处理文件的相关代码部分。 -
Powershell 5.1 get-content 不会在没有“-encoding utf8”参数的情况下检测到 utf8 no bom。
标签: powershell encoding utf-8