Что нового

[Данные, строки] Изменение кодировки файла из ANSI в Юникод

AtoS

Новичок
Сообщения
57
Репутация
2
Доброго времени суток!
Собственно проблема: флормируется некий файл-лог, который потом требуется открыть в шаблонном файле Excel'я со встроенным макросом, но всегда возникает одна и та же проблема - Excel через меню "файл-открыть" выдает окно с указанием типа кодировки и разделителей, т.к. сам автоматически определить кодировку не может. Эксперимент показал, что если текстовый файл сохранить в Юникод - то эксель сразу же понимает о какой кодировке идет речь. Отсюда вопрос, как изменить кодировку текстового файла в Юникод или вообще в какую-то люблю другую кодировку средствами Autoit или же сформировать файл в нужной кодировке?
 
Автор
A

AtoS

Новичок
Сообщения
57
Репутация
2
madmasles сказал(а):
вот как-то у меня не получается использовать эту библиотеку. Понимаю что туплю, но решить проблему не могу.
Файл у меня формируется с помощью команды
Код:
FileWriteLine()

Собственно вот кусок кода:
Код:
Case $msg = $ping_net
			$sReadCombobox = GUICtrlRead($combo)
				$ini_f = IniRead( @ScriptDir&"\p_filials.ini", $sReadCombobox, "addr_f", "Default")
				For $i = 0 To 61 step 1
					$form = StringMid($ini_f, 13, 3)+$i
					$msg_ping = StringMid($ini_f, 1,12)
					$sFile = @ScriptDir&"\"&_NowDate()&"_"& GUICtrlRead($combo) &"_log.txt"
					$ping = Ping ($msg_ping&$form, 250)
					If @error Then
						TCPStartup()
						FileWriteLine ( $sFile,  _NowTime()&"	"&GUICtrlRead($combo)&"	"&$msg_ping&$form & "	"&"Error"&"	"& $sStatus_2)
					Else 
						TCPStartup()
						FileWriteLine ( $sFile,_NowTime()&"	"&GUICtrlRead($combo)&"	"&$msg_ping&$form & "	" &_TCPIpToName($msg_ping&$form)&"	"& $sStatus_1)
					EndIf
					Next
				GUICtrlSetState($open_txt, $GUI_ENABLE)
				GUICtrlSetState($ping_net, $GUI_DISABLE)

И по завершении формирования файла не могу его в нужную кодировку перевести.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AtoS
Попробуйте так:
Код:
#include <Encoding.au3>

$hFileANSI = FileOpen("testANSI.txt", 0)
$sTextANSI = FileRead($hFileANSI)
FileClose($hFileANSI)
$sTextUTF8 = _Encoding_StringToUTF8($sTextANSI)
;$sTextUTF8 = _Encoding_ANSIToUTF8($sTextANSI)
$hFileUTF8 = FileOpen("testUTF8.txt", 2)
FileWrite($hFileUTF8, $sTextUTF8)
FileClose($hFileUTF8)
 
Автор
A

AtoS

Новичок
Сообщения
57
Репутация
2
Отлично, огромное спасибо! То что доктор прописал!
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Достаточно предварительно открывать файл для записи в соответствующем формате.
Код:
$hWrite = FileOpen($sFile, 128 + 2); UTF8 with BOM, 256 - UTF8 without BOM

а уж потом писать в него
Код:
FileWriteLine  ( $hWrite, ...); ... - для сокращения кода
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
Достаточно предварительно открывать файл для записи в соответствующем формате
Не всегда, текст в файле может иметь смешанную кодировку, тогда оно будет записано неправильно и возможно текст уже обратно не переконвертировать.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR [?]
текст в файле может иметь смешанную кодировку
не понял. в какой запишем, такую кодировку и будет иметь. в данном случае пишется в UTF8. файл ведь формируется скриптом, как я понял
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
не понял. в какой запишем, такую кодировку и будет иметь
Файл - да. А его содержимое может быть повреждено, если исходный файл содержал смешанную кодировку строк. Я знаю о чём пишу, я с этим сталкиваюсь почти каждый день :(
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR [?]
если исходный файл
какой исходный? вот перечитываю пост в шапке и не могу найти, где там говорится что нужно AutoIt-ом прочитать какой-нибудь файл. возможно чего-то не понимаю. но у меня четко формируется только одна мысль. скрипт AutoIt формирует некий файл-лог. Но он изначально формируется в ANSI, соответственно его нельзя открыть в Excel не указав предварительно кодировку. Вот я и предложил автору писать этот лог сразу в нужной кодировке.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
какой исходный?
В заголовке темы написано «Изменение кодировки файла», вот отсюда и предположение что изначально есть исходный файл.
 
Верх