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 脚本的指南 [关闭]

无法在 Visual Studio Code 中调试 PowerShell 脚本

PowerShe 使用证书签名 ll脚本

PowerShell启用多跳远程控制