xml - 编辑后如何在 xml 文件中保留重音符号?
问题描述
我正在尝试修改 xml 配置文件中的一个属性值,但是当我保存它时,重音被替换:ô => ô
这是我的代码
$xmlDoc = [XML](Get-Content "C:\MesInterface.config")
$xmlDoc.configuration.ContrôleFlan.lastId = "0"
$xmlDoc.Save("C:\MesInterface.config")
保存后发生了什么
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<ContrôleFlan lastId="0"/></configuration>
解决方案
有两个最终独立的方面需要考虑:
如果您的脚本文件本身包含(与代码相关的)非 ASCII 字符,例如
ô
,您必须确保 PowerShell 引擎正确解释它们。*.ps1
最安全的选择是使用带有 BOM 的 UTF-8 编码来保存文件(带有 BOM的 UTF-16 也是一种选择,但对于主要包含 ASCII 范围字符的文件来说是一种浪费):它确保两个 PowerShell 版本(Windows PowerShell和 PowerShell [Core] v6+) 正确读取文件并且可以表示所有 Unicode 字符。
由于您的 XML 文档有一个指定其编码的 XML 声明
encoding="utf-8"
- 您应该遵循 .NET 的 XML API来识别从文件读取文档和将其写回文件时的编码。通过使用该
.Save()
方法,您已经在将文档写回文件时推迟到 API,但是使用Get-Content
- 它对 XML 一无所知 - 用于读取意味着文件可能会被误解;具体来说,在没有 UTF-8 BOM 的情况下,Windows PowerShell 会将文件读取为ANSI 编码(但请注意,PowerShell [Core] v6+ 现在明智地默认为 UTF-8)。因此,请
Get-Content
使用[xml]
类型的.Load()
方法来读取文件,而不是 ,它尊重 XML 声明中指定的编码:
$file = 'C:\MesInterface.config'
$xmlDoc = New-Object xml
$xmlDoc.Load($file)
$xmlDoc.configuration.ContrôleFlan.lastId = "0"
$xmlDoc.Save($file)
推荐阅读
- php - 尝试在安装 voyager 后运行 php artisan migrate:fresh 它给了我这个错误
- ruby-on-rails - Rails ActiveRecord::PendingMigrationError 上的迁移错误 ruby
- r - 创建直方图矩阵:无 id 变量;使用所有作为测量变量
- vba - 对包含双引号的记录使用 FindRecord
- python - 如何调整我的刮板在 .csv 上的显示方式?
- c++ - 从给定的字符串返回特定子字符串的模式?
- python - 如果重新实例化,则在 python 中处理类删除
- python - 如何让 selenium 尝试 2 xpath 并获得正确的
- r - 改变具有 3 个组的列 - dplyr
- c++ - 无法初始化 m_days[month][day]= 一个对象