Войти

Показать полную графическую версию : [решено] ansi в utf-8


aggressor_
19-10-2012, 03:15
Приветствую. Нашёл в интернете вот такой скрипт

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
19-10-2012, 03:34
хотел бы спросить, не затирает ли он при перегоне файлов какие-либо символы? »
Не сталкивался с таким поведением.

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

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

Iska
19-10-2012, 06:46
Можно как-нибудь сделать, чтобы в UTF-8 (без BOM)? »
Напрямую — никак. Только отсекать, наподобие:
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, отрезать первые три символа, записывать.




© OSzone.net 2001-2012