用于更改编码的Powershell脚本更改重音字符

用于更改编码的Powershell脚本更改重音字符,powershell,encoding,utf-8,Powershell,Encoding,Utf 8,我们有一些摘录是从另一个系统发送给我们的。编码一直在变化。我们需要在内部保持这一点。编写了PowerShell脚本以将编码更改为UTF-8。但是重音字符被改变了。名称Denaè更改为Denaè我想保留名称为Denaè?任何帮助都将不胜感激 我想使用PowerShell将文件更改为UTF-8,重音字符保持不变。可能吗 沃恩普里兹 这是我现在掌握的代码 $Source='C:\Source' $Destination='C:\Destination' $Utf8NoBomEncoding=新对象S

我们有一些摘录是从另一个系统发送给我们的。编码一直在变化。我们需要在内部保持这一点。编写了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){ 持续 }


}
Ã
字符
è
带坟墓的拉丁文小写字母E的UTF-8外观(codepoint
U+00E8

证明:

[System.Text.Encoding]::UTF8.GetBytes([char]'è') -join ', '
# 195, 168

[System.Text.Encoding]::GetEncoding(1252).GetBytes([char[]]'è') -join ', '
# 195, 168

[char[]][System.Text.Encoding]::UTF8.GetBytes([char]'è') -join ''
# è

替换
è->è
看起来像是将文件转换为纯文本,因此它不再是Unicode。显示使用.Powershell 5.1 get content处理文件的代码的相关部分。如果没有“-encoding utf8”参数,则不会检测到utf8 no bom。
[System.Text.Encoding]::UTF8.GetBytes([char]'è') -join ', '
# 195, 168

[System.Text.Encoding]::GetEncoding(1252).GetBytes([char[]]'è') -join ', '
# 195, 168

[char[]][System.Text.Encoding]::UTF8.GetBytes([char]'è') -join ''
# è