2016-12-30 2 views
1

このPowerShellスクリプトでは、csvファイルをインポートし、nullを '0'に置き換えてこのCSVをエクスポートします。CSVコンテンツをUTF-8にエンコードする

問題は、このcsvファイルの内容とヘッダが、私は何もエンコード

任意の提案を、すべてのタイプのための-Encodingを使用し、ほぼすべてのものを試してみました ヘブライ語

であるということですか?

$propertyTranslation = @(
    @{ Name = 'Customer__c'; Expression = { $_.'לקוח' } } 
    @{ Name = 'Name__c';  Expression = { $_.'שם' } } 
    @{ Name = 'CheckCount__c'; Expression = { $_.'כמות' } } 
    @{ Name = 'Deal';   Expression = { $_.'עסקהוזה' } } 
    @{ Name = 'Amount__c';  Expression = { $_.'סכום' } } 
    @{ Name = 'Discount__c'; Expression = { $_.'ניסיון' } } 
    # And so on 
) 

$csv = Import-Csv C:\Users\alon\Documents\again.csv -Header "Customer__c","Name__c","Deal","Amount__c","CheckCount__c","Discount__c" 

$csv | ForEach-Object { 
    if($_.Customer__c -eq "") { $_.Customer__c = "0" } 
    if($_.Name__c -eq "")  { $_.Name__c = "0" } 
    if($_.Deal -eq "")   { $_.Deal = "0" } 
    if($_.Amount__c -eq "")  { $_.Amount__c = "0" } 
    if($_.Discount__c -eq "") { $_.Discount__c = "0" } 
    if($_.CheckCount__c -eq "") { $_.CheckCount__c = "0" } 
} 

Select-Object -Property $propertyTranslation 

$csv | Export-Csv C:\Users\alon\Documents\CheckDealBeforeUpsert.csv -NoTypeInformation -Encoding UTF8 
+0

あなたの '$ propertyTranslation'タイプは' system.array'です。代わりに '$ propertyTranslation = @ { 'Customer__c' = 'לקוח'のような[Hash Table](https://technet.microsoft.com/en-us/library/ee692803.aspx)を考えてみてください。 'Name__c' = 'שם'; 'CheckCount__c' = 'כמות'; 'Deal' = 'עסקהוזה'; 'Amount__c' = 'סכום'; 'Discount__c' = 'ניסיון' } '。しかし、 '$ propertyTranslation'をまったく省略すると、あなたのスクリプトが動作すると言えます。 – JosefZ

+0

あなたのフィードバッハのためにありがとう –

+0

あなたは私のコードを見ることができます(最後の行は少し右を取る)私が使用しようとしている - エンコード。 –

答えて

0

Windowsで使用されている「ANSI」という用語は、基本的にいくつかのエンコード(またはコードページ)の傘の用語です。通常、それはwindows-1252エンコーディングを指します。ただし、入力ファイルはwindows-1255コードページを使用してエンコードされているようです。

PowerShellで-Encoding ASCIIが常にWindows-1252エンコーディングを意味するのか、またはローカライズされたWindowsバージョンに合わせて調整されているのかわかりません。それが調整されていない場合、あなたはおそらく、あなたの入力ファイルにデータをインポートし、修正することができる前にImport-Csvが扱うことができるエンコーディングに変換する必要があります。

$inFile = 'C:\path\to\input.csv' 
$outFile = 'C:\path\to\input_utf8.csv' 

$reader = New-Object IO.StreamReader ($inFile, [Text.Encoding]::GetEncoding(1255)) 
$writer = New-Object IO.StreamWriter ($outFile, $false, [Text.Encoding]::UTF8) 

while ($reader.Peek() -ge 0) { 
    $writer.WriteLine($reader.ReadLine()) 
} 

$reader.Close(); $reader.Dispose() 
$writer.Close(); $writer.Dispose() 
関連する問題