【发布时间】:2020-03-20 11:38:33
【问题描述】:
我有一个带有西班牙变音符号的 CSV 文件 UTF-8 格式,如果我从 Access 加载它并选择 UTF-8 一切都很好。我想自动化我的工作,所以我制作了一个 Powershell 脚本。因为表已经创建,所以我无法使用SELECT * 但INSERT INTO 加载数据。使用SELECT *,我可以指定UTF-8 字符集,如[text;HDR=Yes;CharacterSet=65001;]。如何使用“INSERT INTO”做到这一点?
到目前为止我的代码(工作但 utf-8 字符乱码):
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
$connectstring = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Nobody\Desktop\Mexico-test.accdb"
$conn = New-Object System.Data.OleDb.OleDbConnection($connectstring)
$conn.Open()
$Voters = Import-Csv -Delimiter "," -Path "C:\Users\Nobody\Desktop\mexico.csv"
foreach ($Voter in $Voters)
{
$curp = $Voter.curp
$age = $Voter.age
$forename = $Voter.forename
$middlename = $Voter.middlename
$surname = $Voter.surname
$fatherSurname = $Voter.fatherSurname
$motherSurname = $Voter.motherSurname
$cmd = $conn.CreateCommand()
$cmd.CommandText="INSERT INTO voters(curp,age,forename,middlename,surname,fatherSurname,motherSurname) VALUES('$curp','$age','$forename','$middlename','$surname','$fatherSurname','$motherSurname')"
$cmd.ExecuteNonQuery()
}
$conn.Close()
【问题讨论】:
-
对stackoverflow.com/a/40098904/229367的任何建议有帮助吗?
-
我认为与 Powershell 无关。
-
您是否尝试将从文件中读取的值打印到控制台?它们显示正确吗?
-
似乎无法向控制台显示:
Campo L�pez应该是Campo López -
这意味着
C:\Users\Derecha\Desktop\table.csv实际上不是 UTF-8 - 您需要确定实际编码并将其与-Encoding匹配;例如,在 Windows PowerShell 中尝试-Encoding Default。
标签: powershell ms-access oledb