从powershell字符串中删除xA0

时间:2014-11-19 15:30:40

标签: powershell

我看到一些关于从Python中的字符串中删除xA0字符的文章,我并不陌生,但是那里的提示似乎与Powershell不兼容。

我的问题是我正在解析一个excel文件,有人做了'ctrl + space'并创建了一个xA0不可见字符。我已经从excel表中删除了它,但我很想知道如何过滤/删除这些字符。

在将这些字符串导出为XML(不喜欢这些字符)时会出现问题。

2 个答案:

答案 0 :(得分:2)

如果它只是不间断的空间,您可以使用-replace运算符替换它:

PS C:\> $s = [String]::Join([char]0x00a0, ('Hello','World'))
PS C:\> $s
Hello World
PS C:\> $s -replace [char]0x00a0,'-'
Hello-World

您可能希望在创建XML后进行替换:

PS C:\> ([PSObject]@{"name"=$s} | convertto-xml -as string) -replace [char]0xA0,' '
<?xml version="1.0"?>
<Objects>
  <Object Type="System.Collections.Hashtable">
    <Property Name="Key" Type="System.String">name</Property>
    <Property Name="Value" Type="System.String">Hello&#160;World</Property>
  </Object>
</Objects>

或者更复杂的替代品来处理任何非ascii字符:

PS C:\> $s = [string]::Join([char]160, ("Hello","Powershell","World", "♥♥♥"))
PS C:\> $myxml = $s | ConvertTo-Xml -as String
PS C:\> ([regex]"[\u0080-\uffff]").Replace($myxml, { param($m) "&#$([int][char]$m.Value);" })
<?xml version="1.0"?>
<Objects>
  <Object Type="System.String">Hello&#160;Powershell&#160;World&#160;&#9829;&#9829;&#9829;</Object>
</Objects>
PS C:\>

答案 1 :(得分:0)

获取数值(在本例中为0xA0160)并将其转换为char

# Here is our HTML string
$nbspString = "Hello","World!"-join$([char]0xA0)

# Here we replace the non-breaking space character with a regular space (0x20 or 32)
$normalizedString = $nbspString.Replace([char]0xA0,[char]0x20)

# Same thing, just using the `-replace` operator instead
$normalizedString = $nbspString -replace [char]0xA0,[char]0x20