PowerShell替换为错误的符号
Posted
技术标签:
【中文标题】PowerShell替换为错误的符号【英文标题】:PowerShell replacing with wrong symbol 【发布时间】:2018-02-12 18:53:40 【问题描述】:我正在尝试将 CSV 中的 £
字符替换为 GBP
。
我创建了一个测试 CSV (C:\test\test1),如下所示:
col1, £100 测试我已经设法编写了以下代码:
Import-Csv C:test\test1.csv |
ForEach if($_.ou -match "£") $_.OU = $_.OU -replace "£","GBP"; $_ |
Export-Csv C:\test\test1replaced.csv -NoTypeInformation
我的问题是在创建的文件中£
符号似乎被替换为?
而不是GBP
。看不出我做错了什么。
【问题讨论】:
-Encoding UTF8
.
【参考方案1】:
引用 Jeroen Mostert 的回答:
替换:
Import-Csv C:test\test1.csv |
ForEach if($_.ou -match "£") $_.OU = $_.OU -replace "£","GBP"; $_ |
Export-Csv C:\test\test1replaced.csv -NoTypeInformation
有了这个:
Import-Csv C:test\test1.csv -Encoding UTF8 |
ForEach if($_.ou -match "£") $_.OU = $_.OU -replace "£","GBP"; $_ |
Export-Csv C:\test\test1replaced.csv -NoTypeInformation
您应该使用 -Encoding 开关并将类型设置为 UTF8 来完成它。
【讨论】:
这似乎不起作用。如果我运行: Import-Csv C:test\test1.csv -Encoding UTF8 它已经将控制台中的字符转换为� 如果我运行 -Encoding Default,符号会在控制台中正确显示,但随后替换不起作用【参考方案2】:感谢您的意见。它看起来不像,但它让我想到了我想出的东西:
(get-content C:test\test1.csv).replace('£', 'GBP') | set-content C:\test\test1replaced.csv
【讨论】:
-join (Get-Content "C:test\test1.csv" -Encoding Byte | ForEach-Object [char]$_ )
应该正确处理所有字符,例如£
磅符号,但它可能会失败,例如对于€
欧元符号。以上是关于PowerShell替换为错误的符号的主要内容,如果未能解决你的问题,请参考以下文章
sql Powershell Migration工具http://stackingcode.com/blog/2011/10/12/database-migrations-with-powershel
powershell 来自https://stackoverflow.com/questions/31051103/how-to-export-a-class-in-powershell-v5-mod
使用以下逻辑编写 Powershell 脚本的指南 [关闭]