PDA

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


Паразит
25-05-2017, 15:27
Привет.
Как мне записать файл в UTF-8 кодировке с BOM
Упорно пишет без BOMа.


FileWrite('C:\111.txt', '1111')

Iska
25-05-2017, 16:53
Упорно пишет без BOMа. »
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.

$FO_UTF8 (128) = Use Unicode UTF8 (with BOM) reading and writing mode.
Перевод нужен?

Паразит
25-05-2017, 16:58
Перевод не нужен, а нужен пример рабочего скрипта.

Iska
25-05-2017, 17:29
Держите пример:
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

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)

Паразит
26-05-2017, 06:14
А я 128 ставлю. Оказывается надо делать 130.

Iska, спасибо.

Iska
26-05-2017, 10:33
Паразит, всё правильно. $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)

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




© OSzone.net 2001-2012