我看到一些关于从Python中的字符串中删除xA0字符的文章,我并不陌生,但是那里的提示似乎与Powershell不兼容。
我的问题是我正在解析一个excel文件,有人做了'ctrl + space'并创建了一个xA0不可见字符。我已经从excel表中删除了它,但我很想知道如何过滤/删除这些字符。
在将这些字符串导出为XML(不喜欢这些字符)时会出现问题。
答案 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 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 Powershell World ♥♥♥</Object>
</Objects>
PS C:\>
答案 1 :(得分:0)
获取数值(在本例中为0xA0
或160
)并将其转换为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