【发布时间】:2015-11-12 16:08:47
【问题描述】:
当我只想根据计数器替换“®”时,我的计数器似乎添加了这个非常奇怪的字符。
代码:
[int]$global:counter = 1
Get-Content "C:\Users\mikejoh\Desktop\Cases\Sup\sup.xml" | Foreach {
[regex]::replace($_, '®',
{($global:counter++)})
} | Out-File "C:\Users\mikejoh\Desktop\Cases\Sup\sup_test.xml" -encoding UTF8
脚本之前:
<ExternalIdentifier>600®</ExternalIdentifier>
之后的结果:
<ExternalIdentifier>600Â1</ExternalIdentifier>
这个 'Â' char 是怎么回事?
【问题讨论】:
-
这一定是一个编码问题......如果文件是 UTF8 可能你也需要读取它。
Get-Content "C:\Users\mikejoh\Desktop\Cases\Sup\sup.xml" -Encoding UTF8 -
看起来可能是编码问题。由于正则表达式引擎的工作方式,可能无法修复。 This blog 表示 .Net 正则表达式适用于“UTF-16 代码单元而不是代码点”。也许尝试从源编码转换为 UTF-16,然后应用您的正则表达式,然后再转换回 UTF-8?
-
@Matt 使用相同的编码读取它!
标签: xml powershell counter increment utf