DataTable无法正确转换ä,å,ö字符

时间:2015-10-01 14:37:09

标签: .net powershell encoding datatable

我正在使用this Out-Table function.csv文件的内容作为DataTable。但是,当文件包含äåö(瑞典字符)时,DataTable会将其转换为?。我应该在函数中哪里更改编码,以使字符在输出中看起来正确?这是功能代码:

function Out-DataTable 
{ 
    [CmdletBinding()] 
    param([Parameter(Position=0, Mandatory=$true, ValueFromPipeline = $true)] [PSObject[]]$InputObject) 

    Begin 
    { 
        $dt = new-object Data.datatable

        $First = $true  
    } 
    Process 
    { 
        foreach ($object in $InputObject) 
        { 
            $DR = $DT.NewRow()   
            foreach($property in $object.PsObject.get_properties()) 
            {   
                if ($first) 
                {   
                    $Col =  new-object Data.DataColumn   

                    $Col.ColumnName = $property.Name.ToString()   
                    if ($property.value) 
                    { 
                        if ($property.value -isnot [System.DBNull]) { 
                            $Col.DataType = [System.Type]::GetType("$(Get-Type $property.TypeNameOfValue)") 
                         } 
                    } 
                    $DT.Columns.Add($Col) 
                }   
                if ($property.Gettype().IsArray) { 
                    $DR.Item($property.Name) =$property.value | ConvertTo-XML -AS String -NoTypeInformation -Depth 1 
                }   
               else { 
                    $DR.Item($property.Name) = $property.value 
                } 
            }   
            $DT.Rows.Add($DR)   
            $First = $false 
        } 
    }  

    End 
    { 
        Write-Output @(,($dt)) 
    } 

} #Out-DataTable

1 个答案:

答案 0 :(得分:0)

你的功能很好!

您可能无需对该功能执行任何操作。问题是您传递给函数的数据以及首先获取数据的方式。

编码

您使用的是Import-CSV,还是Get-Content?在任何一种情况下,只要您拥有PowerShell 3.0或更高版本,两个cmdlet都支持-Encoding开关。这是数据导入正确。我确信你使用的是Import-CSV,但Get-Content值得一提。

Import-Csv C:\Temp\file.csv -encoding UTF8 
Get-Content C:\Temp\file.csv -encoding UTF8