.net DataTable未正确转换äåö;人物
我正在使用以.net DataTable未正确转换äåö;人物,.net,powershell,encoding,datatable,.net,Powershell,Encoding,Datatable,我正在使用以数据表的形式获取.csv文件的内容。但是当文件包含ä、å、ö(瑞典字符)时,数据表将它们转换为?。我应该在函数中的何处更改编码,以便字符在输出中看起来正确?以下是功能代码: function Out-DataTable { [CmdletBinding()] param([Parameter(Position=0, Mandatory=$true, ValueFromPipeline = $true)] [PSObject[]]$InputObject)
数据表的形式获取.csv
文件的内容。但是当文件包含ä
、å
、ö
(瑞典字符)时,数据表将它们转换为?
。我应该在函数中的何处更改编码,以便字符在输出中看起来正确?以下是功能代码:
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
你的功能很好!
您可能不必对该函数执行任何操作。问题在于您要传递给函数的数据,以及如何首先获取数据
编码
例如,您使用的是Import CSV
,还是Get Content
?在任何一种情况下,只要您拥有PowerShell 3.0或更高版本,这两种cmdlet都支持-编码开关。这是因为数据导入正确。我确信在您的案例中,您使用的是Import CSV
,但是Get Content
值得一提
Import-Csv C:\Temp\file.csv -encoding UTF8
Get-Content C:\Temp\file.csv -encoding UTF8
您可能不必对该函数执行任何操作。问题可能在于如何获取数据。您正在使用导入CSV吗?它有一个-encoding
开关,您可以使用它,假设您至少有POwerShell 3.0。我想是的,我看到我应该将-encoding
开关添加到导入中,并将其设置为默认值。现在它运行良好。但请将此作为答案发布,并感谢您的帮助。