|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Функция _Encoding_GetCyrillicANSIEncoding |
|
|
[решено] Функция _Encoding_GetCyrillicANSIEncoding
|
Пользователь Сообщения: 68 |
Профиль | Отправить PM | Цитировать Почему у меня не получается правильно определить кодировку файла с помощью функции _Encoding_GetCyrillicANSIEncoding?
Func _Encoding_GetCyrillicANSIEncoding($sString) Local $iCode, $iWIN = 0, $iDOS = 0, $iKOI = 0, $iISO = 0 Local $VarString = StringSplit($sString, "") For $i = 1 To $VarString[0] $iCode = Asc($VarString[$i]) Select Case $iCode = 192 Or $iCode = 224 Or $iCode = 200 Or $iCode = 232 Or $iCode = 206 Or $iCode = 238 Or $iCode = 210 Or $iCode = 242 $iWIN += 1 Case $iCode = 128 Or $iCode = 160 Or $iCode = 136 Or $iCode = 168 Or $iCode = 142 Or $iCode = 174 Or $iCode = 146 $iDOS += 1 Case $iCode = 225 Or $iCode = 193 Or $iCode = 233 Or $iCode = 201 Or $iCode = 239 Or $iCode = 207 Or $iCode = 244 Or $iCode = 212 $iKOI += 1 Case $iCode = 176 Or $iCode = 208 Or $iCode = 184 Or $iCode = 216 Or $iCode = 190 Or $iCode = 222 Or $iCode = 194 $iISO += 1 Case $iCode = 226 $iDOS += 1 $iISO += 1 EndSelect Next If $iKOI >= $iWIN And $iKOI > $iDOS And $iKOI > $iISO Then Return "KOI8-R" ElseIf $iWIN > $iKOI And $iWIN > $iDOS And $iWIN > $iISO Then Return "WINDOWS-1251" ElseIf $iDOS > $iKOI And $iDOS > $iWIN And $iDOS > $iISO Then Return "IBM-866" ElseIf $iISO > $iWIN And $iISO > $iDOS And $iISO > $iKOI Then Return "ISO-8859-5" Else Return False EndIf EndFunc И вообще, существует ли безошибочный способ для такой задачи? _Encoding_GetFileEncoding не считается. Она работает, но она ограничена только ANSI, UTF-8, UTF-16 и UTF-32. Хотелось бы, чтобы определялись те же OEM-866, KOI8, вообщем, любые кириллические кодировки. |
|
Отправлено: 09:43, 14-04-2017 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать #include <Encoding.au3> $bUTF8 = False ;True $sString = 'тест' $sFile = @TempDir & '\test.txt' $hFile = FileOpen($sFile, 2 + ($bUTF8 ? 128 : 0)) FileWrite($hFile, ($bUTF8 ? _Encoding_StringToUTF8($sString) : $sString)) FileClose($hFile) $sRead = FileRead($sFile, 256) If _Encoding_IsUTF8Format($sRead) Then MsgBox(0, @ScriptName, 'UTF-8') Else MsgBox(0, @ScriptName, _Encoding_GetCyrillicANSIEncoding($sRead)) EndIf |
------- Отправлено: 13:30, 14-04-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 68
|
Профиль | Отправить PM | Цитировать Неправильно возвращает кодировку.
Вот у меня файл UTF-16 LE, а он мне показывает WINDOWS-1251. Функция не может определять UTF-16 кодировки. |
Отправлено: 14:10, 14-04-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Паразит:
|
|
Отправлено: 16:15, 14-04-2017 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Паразит:
|
||
------- Отправлено: 01:38, 15-04-2017 | #5 |
Пользователь Сообщения: 68
|
Профиль | Отправить PM | Цитировать Ну вот, я там сделал несколько файлов. Сохранил их в разных блокнотах, и с разными кодировками.
1.zip |
Отправлено: 02:55, 15-04-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Не могли бы Вы ещё указать, какими блокнотами и в какие кодировки Вы сохраняли 1.txt и 5.txt? Ибо там нечто не вполне вразумительное наблюдается. Кодировка вроде как явно указана BOM'ом как UTF-16BE, но дальше…
|
Отправлено: 03:56, 15-04-2017 | #7 |
Пользователь Сообщения: 68
|
Профиль | Отправить PM | Цитировать Iska, я уже и не помню.
Iska, Creat0R, короче задача снимается. Решил отказаться от этого дела. Спасибо Вам. |
Отправлено: 07:55, 15-04-2017 | #8 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Паразит,
#include <Encoding.au3> For $i = 1 To 5 $sFile = @DesktopDir & '\1\' & $i & '.txt' $sEncoding = _Encoding_GetFileEncodingString($sFile) ConsoleWrite('[' & $sFile & '] encoding: ' & $sEncoding & @CRLF) Next Func _Encoding_GetFileEncodingString($sFile) Local $iEncoding = FileGetEncoding($sFile) Switch $iEncoding Case 0 $iEncoding = _Encoding_GetCyrillicANSIEncoding(FileRead($sFile, 256)) Case 32 $iEncoding = 'UTF16 Little Endian' Case 64 $iEncoding = 'UTF16 Big Endian' Case 128 $iEncoding = 'UTF8 (with BOM)' Case 256 $iEncoding = 'UTF8 (without BOM)' EndSwitch Return $iEncoding EndFunc |
------- Отправлено: 12:34, 15-04-2017 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Creat0R, а Вы не определились с содержимым (не кодировкой) файлов 1.txt и 5.txt из приложенного коллегой Паразит архива?
|
Отправлено: 15:56, 15-04-2017 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Функция _Encoding_URIDecode | Паразит | AutoIt | 6 | 14-04-2017 13:49 | |
C/C++ - Функция | pashazt | Программирование и базы данных | 3 | 23-12-2012 01:35 | |
Функция ClearType | destrier | Microsoft Windows 2000/XP | 2 | 18-11-2006 21:11 | |
функция в Visual C++ | Listo | Программирование и базы данных | 2 | 04-05-2006 20:50 | |
Массив и функция | Scorpion666 | Вебмастеру | 4 | 02-03-2006 12:44 |
|