Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] ansi в utf-8 (http://forum.oszone.net/showthread.php?t=245002)

aggressor_ 19-10-2012 03:15 2008283

ansi в utf-8
 
Приветствую. Нашёл в интернете вот такой скрипт
Код:

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 2008285

Цитата:

Цитата aggressor_
хотел бы спросить, не затирает ли он при перегоне файлов какие-либо символы? »

Не сталкивался с таким поведением.

aggressor_ 19-10-2012 03:36 2008286

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

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

Iska 19-10-2012 06:46 2008315

Цитата:

Цитата aggressor_
Можно как-нибудь сделать, чтобы в 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, отрезать первые три символа, записывать.


Время: 04:46.

Время: 04:46.
© OSzone.net 2001-