среда, 13 марта 2013 г.

Удалить BOM маркер из UTF файлов

Многие продукты при работе с UTF файлами не корректно работают если присутствует на нем BOM маркер. В моей работе частенько приходят файлы, сформированные из Microsoft Visual Studio с указанным префиксом. Для лечения сделал небольшой VBScript:

' Removes the Byte Order Mark - BOM from a text file with UTF-8 encoding
' The BOM defines that the file was stored with an UTF-8 encoding.
Public function RemoveBOM(filePath)
  ' Create a reader and a writer
  Dim writer,reader, fileSize
  Set writer = CreateObject("Adodb.Stream")
  Set reader = CreateObject("Adodb.Stream")
  ' Load from the text file we just wrote
  reader.Open
  reader.LoadFromFile filePath
  ' Copy all data from reader to writer, except the BOM
  writer.Mode=3
  writer.Type=1
  writer.Open
  reader.position=5
  reader.copyto writer,-1
  ' Overwrite file
  writer.SaveToFile filePath,2
  ' Return file name
  RemoveBOM = filePath
  ' Kill objects
  Set writer = Nothing
  Set reader = Nothing
end Function

Set objArgs = WScript.Arguments
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(objArgs(0))
Set colFiles = objFolder.Files
For Each objFile in colFiles
  RemoveBOM(objArgs(0) + "\" + objFile.Name)
Next
WScript.Echo "Ok"
Использовать просто - перетянуть папку, в которой живут неправильные файлы, на этот скрипт.