[решено] Записать в заголовок файла BOM

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

[решено] Записать в заголовок файла BOM

Сообщение Паразит »

Привет.

Как мне записать файл в UTF-8 кодировке с BOM

Упорно пишет без BOMа.





Код:

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

FileWrite('C:\111.txt', '1111')
Аватара пользователя
Iska

Re: [решено] Записать в заголовок файла BOM

Сообщение Iska »

Цитата Паразит:



Упорно пишет без BOMа.
[решено] Записать в заголовок файла BOM





Цитата FileWrite:



When writing text AutoIt will write using UTF8 (without BOM) by default. To write in another mode the file must be and the relevant flags.




Цитата FileOpen():



$FO_UTF8 (128) = Use Unicode UTF8 (with BOM) reading and writing mode.



Перевод нужен?
Аватара пользователя
Паразит

Re: [решено] Записать в заголовок файла BOM

Сообщение Паразит »

Перевод не нужен, а нужен пример рабочего скрипта.
Аватара пользователя
Паразит

Re: [решено] Записать в заголовок файла BOM

Сообщение Паразит »

Держите пример:



Скрытый текст

[spoiler]Код:
[/spoiler]

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

#include 
#include 
#include 
Local $sSourceFile = "Sample.txt"
Local $hSourceFile = FileOpen($sSourceFile, $FO_OVERWRITE + $FO_UTF8)
If $hSourceFile = -1 Then
	MsgBox($MB_SYSTEMMODAL, "Error", "Can't open source file [" & $sSourceFile & "].")
	Exit(1)
EndIf
FileWrite($hSourceFile, "Мама ")
FileWrite($hSourceFile, "мыла ")
FileWrite($hSourceFile, "раму." & @CRLF)
FileClose($hSourceFile)
Exit(0)
Аватара пользователя
Паразит

Re: [решено] Записать в заголовок файла BOM

Сообщение Паразит »

А я 128 ставлю. Оказывается надо делать 130.



Iska, спасибо.
Аватара пользователя
Паразит

Re: [решено] Записать в заголовок файла BOM

Сообщение Паразит »

Паразит, всё правильно. $FO_UTF8 — это и есть 128. Этого достаточно для чтения из файла в UTF-8 с BOM (поскольку константа $FO_READ равна нулю). А вот для дозаписи или записи нужно указать соответствующую константу:


Цитата:



$FO_APPEND (1) = Write mode (append to end of file)

$FO_OVERWRITE (2) = Write mode (erase previous contents)



При этом мы складываем одну и другую константы:


Цитата Iska:



$FO_OVERWRITE + $FO_UTF8
[решено] Записать в заголовок файла BOM




для получения соответствующего эффекта (вообще-то, правильнее будет сказать — формируем битовую маску флагов из значений констант, делается она логической операцией OR, но в данном случае константы таковы, что у каждой из них ровно одна цифра единички в двоичном представлении, посему вполне допустимо и банальное арифметическое сложение вместо логической операции).
Ответить

Вернуться в «AutoIt»