Я ищу для создания пакетного файла/макроса для удаления первой строки автоматически сгенерированного CSV UTF-8 и преобразования его в кодовую страницу Windows 1251 ("ANSI"). Я искал по всему интернету и пробовал много вещей, но просто не могу найти тот, который работает ...csv-файл UTF-8 (с BOM) в ANSI/Windows-1251
Удаление первой линии достаточно
@echo off
set "csv=test.csv"
more +1 "%csv%" >"%csv%.new"
move /y "%csv%.new" "export\%csv%" >nul
просто после этого я «м потерял, Ive пытался с помощью заданного типа из DOS
cmd /a /c TYPE test.csv > ansi.csv
и много вариаций, но это либо возвращает пустой файл CP1251 или просто другой файл UTF.
Я попытался с помощью VBS, но это возвращается другой файл UTF-8, но теперь без BOM
Option Explicit
Private Const adReadAll = -1
Private Const adSaveCreateOverWrite = 2
Private Const adTypeBinary = 1
Private Const adTypeText = 2
Private Const adWriteChar = 0
Private Sub UTF8toANSI(ByVal UTF8FName, ByVal ANSIFName)
Dim strText
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeBinary
.LoadFromFile UTF8FName
.Type = adTypeText
.Charset = "utf-8"
strText = .ReadText(adReadAll)
.Position = 0
.SetEOS
.Charset = "_autodetect" 'Use current ANSI codepage.
.WriteText strText, adWriteChar
.SaveToFile ANSIFName, adSaveCreateOverWrite
.Close
End With
End Sub
UTF8toANSI "UTF8-wBOM.txt", "ANSI1.txt"
UTF8toANSI "UTF8-noBOM.txt", "ANSI2.txt"
MsgBox "Complete!", vbOKOnly, WScript.ScriptName
EDIT1: попытался преобразования в ISO-8859-1 вместо cp1251 с помощью VBS
Option Explicit
Private Const adReadAll = -1
Private Const adSaveCreateOverWrite = 2
Private Const adTypeBinary = 1
Private Const adTypeText = 2
Private Const adWriteChar = 0
Private Sub UTF8toANSI(ByVal UTF8FName, ByVal ANSIFName)
Dim strText
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeBinary
.LoadFromFile UTF8FName
.Type = adTypeText
.Charset = "utf-8"
strText = .ReadText(adReadAll)
.Position = 0
.SetEOS
.Charset = "iso-8859-1"
.WriteText strText, adWriteChar
.SaveToFile ANSIFName, adSaveCreateOverWrite
.Close
End With
End Sub
UTF8toANSI WScript.Arguments(0), WScript.Arguments(1)
Это, однако, также не сработало.
EDIT 2: я нашел способ для преобразования файлов из UTF в ANSI, используя stringconverter.exe (загруженный из http://www.computerperformance.co.uk/ezine/tools.htm)
Setlocal
Set _source=C:\Users\lloyd.EVD\delFirstBat\import
Set _dest=C:\Users\lloyd.EVD\delFirstBat\export
For /F "Tokens=*" %%I In ('dir /b /a-d "%_source%\*.CSV"') Do stringconverter "%_source%\%%~nxI" "%_dest%\%%~nxI" /ANSI
Как никогда сейчас, когда я удалить первую строку файла (до или после, не имеет значения), он снова становится UTF-8 без спецификации.
Итак, теперь мне нужно только сценарий для первой строки без изменения кодировки.
Название «ANSI», хотя это обычно используется, является неточным. Вероятно, это относится к одной из 8-битных кодовых страниц, используемых в Microsoft Windows, возможно, Windows-1252. Если вы конвертируете UTF-8 в Windows-1252, вы можете запускать символы, которые невозможно преобразовать. https: //en.wikipedia.org/wiki/Windows-1252 –
Да, нам нужны файлы, которые будут в W-1251. Мы уже заполнили систему таким образом, чтобы эти неконвертируемые символы не использовались. факт остается, система генерирует utf-8 .csv, а система, которую мы хотим импортировать, требует ANSI .csv без заголовков. –
. Вы должны обновить вопрос, чтобы указать Windows-1251. –