使用PowerShell进行编码时出错

使用PowerShell进行编码时出错,powershell,csv,encoding,batch-file,utf-8,Powershell,Csv,Encoding,Batch File,Utf 8,我有一个bat文件,其中我将一些CSV文件编码为UTF-8,然后将这些文件导入SQLite数据库。 这是我的代码: echo Codificando ficheros... powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\prefijo.csv powershell -Command "&{ param($Path); (Get-C

我有一个bat文件,其中我将一些CSV文件编码为UTF-8,然后将这些文件导入SQLite数据库。 这是我的代码:

echo Codificando ficheros...
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\prefijo.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\materiales.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\zonas.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\responsables.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\lideres.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\pass.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\capacidadLotes.csv
powershell -Command "&{ param($Path); (Get-Content $Path) | Out-File $Path -Encoding UTF8 }" CSVs\\boletosIndirectos.csv
@echo OFF
echo Generando fichero de base de datos _datosPrecargados.db...
.\sqlite3.exe BaseDatos\_datosPrecargados.db < Sentencias_sql\Sentencias_DatosPrecargados.sql
@echo OFF
echo Generando fichero de base de datos _inventario.db...
.\sqlite3.exe BaseDatos\_inventario.db < Sentencias_sql\Sentencias_Inventario.sql
pause
如果我执行句子
“SELECT*FROM zones”
,它会列出所有记录,ok

如果我执行语句
“从zone=“Z002”“
所在的区域中选择*,则会列出记录,确定

但是,如果我执行语句
“SELECT*FROM zones WHERE zone=“Z001”“
,则找不到记录

如果我没有在bat文件中设置PowerShell行,则不会发生这种情况,而且工作正常,但我需要对文件进行编码,因为我在CSV文件中有特殊字符,如“ñ”或“ó”

我不知道我做错了什么


提前谢谢

如果文件中的字符以前已损坏,则转码无法修复它们,因此您的PowerShell调用不太可能有助于解决潜在问题。我怀疑您需要更改代码页:

chcp 1251 >nul

该命令将当前控制台(即当前
CMD
实例)的代码页更改为给定值(请参阅)<代码>>nul只是为了抑制输出,这对脚本的其余部分无关紧要。

在执行导入之前,请确保控制台和

复制并通过Powershell窗口中的脚本

 foreach($FileNameInUnicodeOrWhatever in get-childitem)
 {
    $FileName = $FileNameInUnicodeOrWhatever.Name

    $TempFile = "$($FileNameInUnicodeOrWhatever.Name).ASCII"

    get-content $FileNameInUnicodeOrWhatever | out-file $FileNameInUnicodeOrWhatever -Encoding ASCII 

    remove-item $FileNameInUnicodeOrWhatever

    rename-item $TempFile $FileNameInUnicodeOrWhatever

    write-output $FileNameInUnicodeOrWhatever "converted to ASCII ->" $TempFile
}

如果您遵循下面的链接,我也会在控制台上设置您的编码


我想有些不可打印的字符存储在那里,可能是存储了BOM数据。我想知道如果从name='zone 1'的区域中选择LEN(zone)作为长度,返回的长度是否超过4个。没错,我得到的字符比我能看到的多了一个,我尝试过用ASCII编码,问题消失了,但我不能使用特殊字符;(我将尝试使用其他编码类型。我想知道如果使用记事本++并将一个保存为UTF8(无BOM),另一个保存为UTF8(有BOM),会发生什么情况)然后导入这两个文件,看看没有BOM的文件是否正常。我想这是第一件事,但它必须是一个bat文件,并且csv是用excelok生成的,所以这意味着一旦bat结束,它不会影响,对吗?抱歉,但尝试后它不起作用:(,发生相同的情况)
 foreach($FileNameInUnicodeOrWhatever in get-childitem)
 {
    $FileName = $FileNameInUnicodeOrWhatever.Name

    $TempFile = "$($FileNameInUnicodeOrWhatever.Name).ASCII"

    get-content $FileNameInUnicodeOrWhatever | out-file $FileNameInUnicodeOrWhatever -Encoding ASCII 

    remove-item $FileNameInUnicodeOrWhatever

    rename-item $TempFile $FileNameInUnicodeOrWhatever

    write-output $FileNameInUnicodeOrWhatever "converted to ASCII ->" $TempFile
}