【问题标题】:Powershell Increment Global:counter++Powershell 增量全局:counter++
【发布时间】: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


【解决方案1】:

由于您正在使用 UTF8 写回文件,我的假设是文件的编码方式和读取方式应该相同。

我相信Get-Content 默认为 ASCII 编码。从 PowerShell 3.0 开始,-Encoding 参数可用。

Get-Content "C:\Users\mikejoh\Desktop\Cases\Sup\sup.xml" -Encoding UTF8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    相关资源
    最近更新 更多