Тема: AHK: Сохранение файла с BOM
Данный скрипт (сохраненный в UTF-8 с BOM) успешно переписывает себя, но BOM теряет, соответственно, при последующих запусках, интерпретатор считает что кодировка CP12xx. Запускать дважды.
file := FileOpen(A_ScriptFullPath, "r")
encoding := file.Encoding
scriptContent := file.Read()
file.Close()
MsgBox Кодировка согласно свойству .Encoding`n%encoding%
MsgBox % GetFileBOM(A_ScriptFullPath)
GetFileBOM(file) {
FileRead,text,*c %file%
If (0xBFBBEF=NumGet(&text,"UInt") & 0xFFFFFF)
Return "UTF-8 BOM"
else if (0xFFFE=NumGet(&text,"UShort") || 0xFEFF=NumGet(&text,"UShort"))
Return "UTF-16 BOM"
FileGetSize,size,%file%
Return StrLen(StrGet(&text,"UTF-8"))=size?"ANSI":"UTF-8 no BOM"
}
file := FileOpen(A_ScriptFullPath, "w")
file.Encoding := encoding
file.Write(scriptContent)
file.Close()
В справке по FileOpen() написано:
When a UTF-8 or UTF-16 file is created, a byte order mark is written to the file unless Encoding (or A_FileEncoding if Encoding is omitted) contains "UTF-8-RAW" or "UTF-16-RAW".
Почему-то в моем примере BOM не записывается.
Пока на ум ничего не приходит, разве что при сохранении добавлять в начало Hex-содержимого файла .