СН3СН2ОН
Знающий
- Сообщения
- 78
- Репутация
- 12
На входе:
Windows 7 (32.64), Autoit_portable v3.3.14.2 и портативный Scite.
Ситуация:
Иногда необходимо читать и писать в файлы именно в этой кодировке. Причем файлы взаимосвязаны, их создают сторонние программы.
Что прочитано:
1
2
и производные от них
Что получилось:
Запись 1
Используем бинарный режим, метод тыка
Запись 2
Метод форума
Чтение 1
Файл 111.txt можно получить набрав в CMD
Во всех методах записи Autoit видит,что кодировка файла 512
Запись 2 (Автор InnI ), в первом варианте запись корректна(cmd отрабатывает),чтение из файла некорректно, а я посмотрел, код красивый и забрал, придется переделывать.
Второй вариант не тестировал, слишком сложно, мы же не UDF пишем.
На работе я сегодня использовал Запись 1, а дома вечером придумал Чтение 1.
И это нормальные рабочие варианты.
Собственно вопроса нет, только злость...
Пусть этот код поможет новичкам, как я.
А если у вас есть более продвинутые решения, поделитесь пожалуйста. Спасибо.
Upd.
Я очень сильно извиняюсь, но возможно причина в портативном Scite. Веду расследование.
Windows 7 (32.64), Autoit_portable v3.3.14.2 и портативный Scite.
Ситуация:
Иногда необходимо читать и писать в файлы именно в этой кодировке. Причем файлы взаимосвязаны, их создают сторонние программы.
Что прочитано:
1
2
и производные от них
Что получилось:
Запись 1
Используем бинарный режим, метод тыка
Код:
#include <Encoding.au3>
$batnik = FileOpen($FolderC & '\cp_.bat', 2+16)
$batCode = 'что-то'
FileWrite($batnik, _Encoding_ANSIToOEM($batCode))
FileClose($batnik)
Запись 2
Метод форума
Код:
#include <WinAPIMisc.au3>
$batnik = FileOpen($FolderC & '\cp_.bat', 2+1024)
$batCode = 'что-то'
FileWrite($batnik, _WinAPI_CharToOem($batCode))
FileClose($batnik)
Чтение 1
Файл 111.txt можно получить набрав в CMD
Код:
echo превет!!! >> 111.txt
Код:
#include <Encoding.au3>
$F = @ScriptDir & '\111.txt'
ConsoleWrite('Кодировка файла ' & FileGetEncoding($F) & @CRLF)
$_L = FileOpen($F,512)
$file = FileRead($_L)
ConsoleWrite(_Encoding_866To1251($file))
ConsoleWrite(_Encoding_CyrillicTo1251($file))
Во всех методах записи Autoit видит,что кодировка файла 512
Код:
$F = @ScriptDir & '\111.txt'
ConsoleWrite('Кодировка файла ' & FileGetEncoding($F) & @CRLF)
Запись 2 (Автор InnI ), в первом варианте запись корректна(cmd отрабатывает),чтение из файла некорректно, а я посмотрел, код красивый и забрал, придется переделывать.
Второй вариант не тестировал, слишком сложно, мы же не UDF пишем.
Код:
#include <WinAPIMisc.au3>
$str = "сохраняем ANSI-строку в кодировке 866"
; вариант 1
$f = FileOpen("test1.txt", 2 + 1024)
$dos = _WinAPI_CharToOem($str)
FileWrite($f, $dos)
FileClose($f)
; вариант 2
$f = FileOpen("test2.txt", 2 + 512)
$aRet = DllCall('user32.dll', 'bool', 'CharToOemA', 'str', $str, 'str', '')
$dos = $aRet[2]
FileWrite($f, $dos)
FileClose($f)
На работе я сегодня использовал Запись 1, а дома вечером придумал Чтение 1.
И это нормальные рабочие варианты.
Пусть этот код поможет новичкам, как я.
А если у вас есть более продвинутые решения, поделитесь пожалуйста. Спасибо.
Upd.
Я очень сильно извиняюсь, но возможно причина в портативном Scite. Веду расследование.