VBS/WSH/JS - [решено] ansi в utf-8

Ответить
Аватара пользователя
aggressor_

VBS/WSH/JS - [решено] ansi в utf-8

Сообщение aggressor_ »

Приветствую. Нашёл в интернете вот такой скрипт



Код:

Код: Выделить всё

option Explicit
Dim fso,files,file
Const adTypeBinary = 1
Const adTypeText = 2
Const bOverwrite = True
Const bAsASCII = False
Dim oFr : Set oFr = CreateObject("ADODB.Stream")
Dim sFr : sFr = "Windows-1251"
Dim oTo : Set oTo = CreateObject("ADODB.Stream")
Dim sTo : sTo = "utf-8"
set fso = CreateObject("Scripting.FileSystemObject")
set files = fso.GetFolder("D:\www\index").Files
For Each file In files
oFr.Type = adTypeText
oFr.Charset = sFr
oFr.Open
oFr.LoadFromFile file
oTo.Type = adTypeText
oTo.Charset = sTo
oTo.Open
oTo.WriteText oFr.ReadText
oTo.SaveToFile ("D:\www\index2\" & file.Name)
oFr.Close
oTo.Close
Next

Вроде работает хорошо. Но хотел бы спросить, не затирает ли он при перегоне файлов какие-либо символы? Файлы содержат теги html и другие загогулины пунктуации.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] ansi в utf-8

Сообщение Iska »

Цитата aggressor_:



хотел бы спросить, не затирает ли он при перегоне файлов какие-либо символы?
VBS/WSH/JS - [решено] ansi в utf-8




Не сталкивался с таким поведением.
Аватара пользователя
aggressor_

Re: VBS/WSH/JS - [решено] ansi в utf-8

Сообщение aggressor_ »

Iska, я в этом ничего не понимаю. Поэтому решил уточнить. Мало ли есть какие-нибудь ограничения. Не хотелось бы потом искать, что зажевал скрипт при перегоне.



Только сейчас заметил, что скрипт гонит в обычный UTF8. Можно как-нибудь сделать, чтобы в UTF-8 (без BOM)?
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] ansi в utf-8

Сообщение Iska »

Цитата aggressor_:



Можно как-нибудь сделать, чтобы в UTF-8 (без BOM)?
VBS/WSH/JS - [решено] ansi в utf-8




Напрямую — никак. Только отсекать, наподобие:


читать дальше »




Код:

Код: Выделить всё

Option Explicit
Const adTypeBinary    = 1
Const adTypeText      = 2
Const adModeReadWrite = 3
Dim objFSO
Dim objFile
Dim objStreamText
Dim objStreamBinary
Dim strContent
Dim strNewFileName
Set objFSO          = WScript.CreateObject("Scripting.FileSystemObject")
Set objStreamText   = WScript.CreateObject("ADODB.Stream")
Set objStreamBinary = WScript.CreateObject("ADODB.Stream")
With objStreamText
	.Type = adTypeText
	.Mode = adModeReadWrite
	.Open
End With
With objStreamBinary
	.Type = adTypeBinary
	.Mode = adModeReadWrite
	.Open
End With
For Each objFile In objFSO.GetFolder("E:\Песочница\0187").Files
	With objStreamText
		.Charset   = "windows-1251"
		.LoadFromFile objFile.Path
		strContent = .ReadText()
		.Position  = 0
		.SetEOS
		.Charset   = "utf-8"
		.WriteText strContent
		.Position  = 3
		.CopyTo objStreamBinary
		.Position  = 0
		.SetEOS
		strNewFileName = objFSO.BuildPath("E:\Песочница\0188", objFile.Name)
		If objFSO.FileExists(strNewFileName) Then
			objFSO.DeleteFile strNewFileName, True
		End If
		With objStreamBinary
			.SaveToFile strNewFileName
			.Position = 0
			.SetEOS
		End With
	End With
Next
objStreamText.Close
objStreamBinary.Close
Set objStreamBinary = Nothing
Set objStreamText   = Nothing
Set objFSO          = Nothing
WScript.Quit 0





или посредством «Scripting.FileSystemObject» → «TextStream»: читать как ANSI, отрезать первые три символа, записывать.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»