使用PowerShell进行编码时出错
我有一个bat文件,其中我将一些CSV文件编码为UTF-8,然后将这些文件导入SQLite数据库。 这是我的代码:使用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
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
}