2017-09-04 48 views
1

我試圖用CSV替換£中的字符GBP用錯誤符號替換PowerShell

我創建了一個測試CSV(C:\測試\ test1的)如下:

 
col1, 
£100 Test 

我已成功地寫出下面的代碼:

Import-Csv C:test\test1.csv | 
    ForEach { if($_.ou -match "£") {$_.OU = $_.OU -replace "£","GBP"}; $_} | 
    Export-Csv C:\test\test1replaced.csv -NoTypeInformation 

我的問題是,在該文件中創建£符號似乎被替換爲?而不是GBP。看不到我做錯了什麼。

+6

'-Encoding UTF8'。 –

回答

0

引用的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到完成它。

+0

這似乎並不奏效。如果我運行:Import-Csv C:test \ test1.csv - 編碼UTF8它已經將控制檯中的字符轉換爲 – user8532116

+0

如果我運行-Encoding默認情況下,符號在控制檯中正確顯示,但替換不會工作 – user8532116

+0

@ user8532116:嘗試其他格式也參見 –

0

非常感謝您的意見。它看起來並不像它,但它讓我想到了什麼:

(get-content C:test\test1.csv).replace('£', 'GBP') | set-content C:\test\test1replaced.csv 
+0

'-join(Get-Content「C:test \ test1.csv」-Encoding Byte | ForEach-Object {[char] $ _})'應正確處理所有字符'''_磅符號,但它可能會失敗,例如爲'''_歐元符號。 – JosefZ