Что нового

Encoding UDF - Библиотека для работы с кодировками строк

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Версия AutoIt
3.3.0.0
Версия
1.7
Категория: Кодирование

Описание: Библиотека позволяющая работать с разными кодировками строк.
Поддерживаются кодировки: ANSI, OEM, Unicode, UTF-8 (+ с BOM), KOI8-R, IBM-866, ISO-8859-5, WINDOWS-1251, JavaUnicode, Base64, URI.

Список функций:
_Encoding_866To1251
_Encoding_ANSIToOEM
_Encoding_ANSIToUTF8
_Encoding_Base64Decode
_Encoding_Base64Encode
_Encoding_CyrillicTo1251
_Encoding_GetCyrillicANSIEncoding
_Encoding_GetFileEncoding
_Encoding_QuotedPrintableToANSI
_Encoding_HexToURL
_Encoding_ISO88591To1251
_Encoding_ISO8859To1251
_Encoding_IsUTF8Format
_Encoding_JavaUnicodeDecode
_Encoding_JavaUnicodeEncode
_Encoding_KOI8To1251
_Encoding_OEM2ANSI
_Encoding_PhpEncode
_Encoding_StringToUTF8
_Encoding_URIDecode
_Encoding_URIEncode
_Encoding_URLToHex
_Encoding_UTF8BOMDecode
_Encoding_UTF8ToANSI
_Encoding_UTF8ToANSI_API
_Encoding_UTF8ToUnicode_API

Пример #1 (UTF-8):
Код:
#include <Encoding.au3>

$sANSI_String = "Тест"
$sUTF8_String = _Encoding_StringToUTF8($sANSI_String)

MsgBox(64, "UTF8 -> " & $sUTF8_String, "Is UTF-8 Format = " & _Encoding_IsUTF8Format($sUTF8_String))
MsgBox(64, "ANSI -> " & $sANSI_String, "Is UTF-8 Format = " & _Encoding_IsUTF8Format($sANSI_String))

Пример #2 (URI):
Код:
#include <Encoding.au3>

$sOriginal_URL = "http://ru.wikipedia.org/wiki/Википедия"

$sStringURLToHex = _Encoding_URLToHex($sOriginal_URL)
$sStringHexToURL = _Encoding_HexToURL($sStringURLToHex)

MsgBox(64, 'Results', _
    StringFormat("Original: %s\n\nURL To Hex: %s\n\n\nOriginal: %s\n\nHex To URL: %s", _
        $sOriginal_URL, $sStringURLToHex, $sStringURLToHex, $sStringHexToURL))

Список изменений:
[v1.7], 19.03.2016
* _Encoding_RemoteEncode переименована в _Encoding_PhpEncode, т.к теперь она использует небольшой локальный php сервер.
- Убран параметр $bUnicode из функции _Encoding_PhpEncode.

[v1.6], 15.03.2016
+ Добавлены заголовки к функциям с детальной документацией.
+ Добавлена функция _Encoding_RemoteEncode (удалённое конвертирование используя php).
* Оптимизация кода.

[v1.5], 24.09.2012
* Кодировка библиотеки изменена обратно на ANSI, изменённая кодировка вызывала проблемы с утилитой проверки синтаксиса.
* _Encoding_HexSymbolsToANSI переименована в _Encoding_QuotedPrintableToANSI. _Encoding_HexSymbolsToANSI по прежнему поддерживается (устарела).

[v1.4], 26.01.2011
* Обновлены/исправлены функции _Encoding_Base64*.

[v1.3], 20.07.2010
* Исправлена функция _Encoding_Base64Decode, неправильное возвращаемое значение для не-ANSI символов.

[v1.2], 20.05.2010
+ Добавлена функция _Encoding_ISO8859To1251.

[v1.1], 25.01.2010
* Глобальное переименование всех функций - вместо префикса "_String" теперь используется префикс "_Encoding_".
* Исправлена функция _StringIsUTF8Format (_Encoding_IsUTF8Format), и добавлен новый опциональный параметр $iCheckASCIICode (по умолчанию False) для проверки спец. символов в таблице ASCII (Char < 128).
+ Добавлено 7 новых функций:
1) _Encoding_CyrillicTo1251 - Конвертирует кириллицу любой кодировки в кодовую страницу Microsoft 1251.
2) _Encoding_HexSymbolsToANSI - Конвертирует HEX-символы в строке (Пример: "=D2=C1=C2=CF") в ANSI-символы.
3) _Encoding_GetCyrillicANSIEncoding - Поверяет ANSI-кодировку кириллицы.
Требует как минимум 3-4 кириллических выражений (слов) определённой строки.
4) _Encoding_866To1251 - Конвертирует кириллическую строку с кодовой страницы IBM 866 в к.страницу Microsoft 1251.
5) _Encoding_KOI8To1251 - Конвертирует кириллическую строку с KOI8-R в кодовую страницу Microsoft 1251.
6) _Encoding_ISO8859To1251 - Конвертирует кириллическую строку с ISO-8859-5 в кодовую страницу Microsoft 1251.
7) _Encoding_GetFileEncoding - Определяет кодировку файла.

Автор(ы): CreatoR, amel27, LEX1, trancexx, Ward, Latoid, LazyCat (Loopback)
 
Автор
G.Sandler

Вложения

Последнее редактирование:
  • Like
Реакции: Norm

Latoid

Знающий
Сообщения
95
Репутация
11
Думаю, стоит сделать апдейт функции _StringIsUTF8Format в соответствии с этим сообщением: http://autoit-script.ru/index.php?topic=780.msg5418#msg5418

Также можно добавить в UDF функции из этой темы http://autoit-script.ru/index.php?topic=710 Если, конечно, сочтете их достойными этого.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Latoid [?]
Также можно добавить в UDF функции из этой темы
Можно, но для начала хотелось бы увидеть примеры работы данных функций.
 

Latoid

Знающий
Сообщения
95
Репутация
11
CreatoR сказал(а):
Можно, но для начала хотелось бы увидеть примеры работы данных функций.
Подготовил. См. приложенный файл
Код:
#include <Functions_to_add_in_Encoding_UDF.au3>
Opt("MustDeclareVars", 1)

; Функцию _ConvertCyrillicStringTo1251 используем когда кодировка строки заранее неизвестна. Конвертит строки следующих 5 кодировок: KOI8-R, IBM-866, ISO-8859-5, HEX, UTF8
ConsoleWrite (_ConvertCyrillicStringTo1251 ("The only fun remained to me - put fingers in the mouth and whistle merrily") & @CRLF) ; latin
ConsoleWrite (_ConvertCyrillicStringTo1251 ("Мне осталась одна забава: пальцы в рот - и веселый свист.") & @CRLF) ; win
ConsoleWrite (_ConvertCyrillicStringTo1251 ("Џа®Є вЁ« бм ¤га­ п б« ў , зв® Ї®е Ў­ЁЄ п Ё бЄ ­¤ «Ёбв.") & @CRLF) ; dos
ConsoleWrite (_ConvertCyrillicStringTo1251 ("бИ! ЛБЛБС УНЕЫОБС РПФЕТС! нОПЗП Ч ЦЙЪОЙ УНЕЫОЩИ РПФЕТШ.") & @CRLF) ; koi
ConsoleWrite (_ConvertCyrillicStringTo1251 ("БвлФЭЮ ЬЭХ, звЮ п Т ±ЮУР ЭХ ТХаШЫ. іЮамЪЮ ЬЭХ, звЮ ЭХ ТХао вХЯХам.") & @CRLF) ; iso
ConsoleWrite (_ConvertCyrillicStringTo1251 ("Золотые далёкие дали! Всё сжигает житейская мреть.") & @CRLF) ; utf8
ConsoleWrite (_ConvertCyrillicStringTo1251 ("=E9 =D0=CF=C8=C1=C2=CE=C9=DE=C1=CC =D1 =C9 =D3=CB=C1=CE=C4=C1=CC=C9=CC =C4=CC=D1 =D4=CF=C7=CF=2C =DE=D4=CF=C2=D9 =D1=D2=DE=C5 =C7=CF=D2=C5=D4=D8=2E") & @CRLF) ; hex

; Нижеследующие функции используем когда кодировка известна
ConsoleWrite (_866TO1251("„ а Ї®нв  - « бЄ вм Ё Є апЎ вм, а®Є®ў п ­  ­Ґ¬ ЇҐз вм.") & @CRLF) ; dos
ConsoleWrite (_KOI8TO1251("тПЪХ ВЕМХА У ЮЕТОПК ЦБВПК С ИПФЕМ ОБ ЪЕНМЕ РПЧЕОЮБФШ.") & @CRLF) ; koi
ConsoleWrite (_ISO8859TO1251("їгбвм ЭХ бЫРФШЫШбм, Ягбвм ЭХ бСлЫШбм нвШ ЯЮЬлбЫл аЮЧЮТле ФЭХЩ.") & @CRLF) ; iso
ConsoleWrite (_HexSymbolsTOANSI("=CD=EE =EA=EE=EB=FC =F7=E5=F0=F2=E8 =E2 =E4=F3=F8=E5 =E3=ED=E5=E7=E4=E8=EB=E8=F1=FC =2D =C7=ED=E0=F7=E8=F2=2C =E0=ED=E3=E5=EB=FB =E6=E8=EB=E8 =E2 =ED=E5=E9=2E") & @CRLF) ; hex

; Функция _WhatIsCyrillicANSIEncoding определяет ANSI кодировки: KOI8-R, WINDOWS-1251, IBM-866, ISO-8859-5. Требует не менее 3-4 осмысленых русских слов для уверенного определения
ConsoleWrite (_WhatIsCyrillicANSIEncoding("оП ЛПМШ ЮЕТФЙ Ч ДХЫЕ ЗОЕЪДЙМЙУШ - ЪОБЮЙФ, БОЗЕМЩ ЦЙМЙ Ч ОЕК.") & @CRLF) ; koi
ConsoleWrite (_WhatIsCyrillicANSIEncoding("Вот за это веселие мути, отправляясь с ней в край иной,") & @CRLF) ; win
ConsoleWrite (_WhatIsCyrillicANSIEncoding("П еЮзг ЯаШ ЯЮбЫХФЭХЩ ЬШЭгвХ їЮЯаЮбШвм вХе, ЪвЮ СгФХв бЮ ЬЭЮЩ, -") & @CRLF) ; iso
ConsoleWrite (_WhatIsCyrillicANSIEncoding("—в®Ў §  ўбҐ §  ЈаҐеЁ ¬®Ё вп¦ЄЁҐ, §  ­ҐўҐаЁҐ ў Ў« Ј®¤ вм") & @CRLF) ; dos
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Latoid [?]
Ок, функций добавил, но я немного их перемименую...


Добавлено:
Сообщение автоматически объединено:

Кстати, не помешала бы функция для получения кодировки файла (в последней бета такая уже есть, но всё ровно не помешает в виде UDF, для более ранних версий).
 

Latoid

Знающий
Сообщения
95
Репутация
11
CreatoR сказал(а):
Кстати, не помешала бы функция для получения кодировки файла (в последней бета такая уже есть, но всё ровно не помешает в виде UDF, для более ранних версий).
Как функция в бете называется? Поковыряю.
 

Latoid

Знающий
Сообщения
95
Репутация
11
Она не в UDF выполнена, а вшита нативно. Так что подсмотреть алгоритм не получится (или я просто не знаю, как это сделать). Придется своё сочинять. Завтра будет :smile:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Latoid [?]
Она не в UDF выполнена, а вшита нативно
Если бы это была UDF, я бы не стал писать про необходимость таковой ;)
 

Latoid

Знающий
Сообщения
95
Репутация
11
Latoid сказал(а):
Она не в UDF выполнена, а вшита нативно. Так что подсмотреть алгоритм не получится (или я просто не знаю, как это сделать). Придется своё сочинять. Завтра будет :smile:
Собственно, всё уже сделано человеком, известным на офф. форуме как Lazycat, а у нас, он, если не ошибаюсь, Loopback
http://autoit.darkhost.ru/udfs.html Первая UDF в списке
 

Latoid

Знающий
Сообщения
95
Репутация
11
Пытаюсь модифицировать UDF Lazycat и встал вопрос - можно ли отличить текстовый файл от бинарного? Чтоб функция возвращала Error если ей бинарный передали
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Latoid
Я думаю, принципиальной разницы между бинарным и текстовым файлом нет...
Есть только признаки: наличие в текстовом файле символов Chr(10) и Chr(13) и отсутствие других управляющих символов...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Latoid
бинарный и текстовый - это не свойство файла или тип, а способ передачи/чтения/записи. для того чтобы посмотреть какой именно способ выбран, надо смотреть саму функцию передачи или приема. там это указано в виде флага, скорее всего

а вообще, Latoid, это не та тема где можно обсуждать другие UDF. найди соответствующую тему или создай новую
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Обновление:

Список изменений:
[v1.1], 25.01.2010
* Глобальное переименование всех функций - вместо префикса "_String" теперь используется префикс "_Encoding_".
* Исправлена функция _StringIsUTF8Format (_Encoding_IsUTF8Format), и добавлен новый опциональный параметр $iCheckASCIICode (по умолчанию False) для проверки спец. символов в таблице ASCII (Char < 128).
+ Добавлено 7 новых функций:
1) _Encoding_CyrillicTo1251 - Конвертирует кириллицу любой кодировки в кодовую страницу Microsoft 1251.
2) _Encoding_HexSymbolsToANSI - Конвертирует HEX-символы в строке (Пример: "=D2=C1=C2=CF") в ANSI-символы.
3) _Encoding_GetCyrillicANSIEncoding - Поверяет ANSI-кодировку кириллицы.
Требует как минимум 3-4 кириллических выражений (слов) определённой строки.
4) _Encoding_866To1251 - Конвертирует кириллическую строку с кодовой страницы IBM 866 в к.страницу Microsoft 1251.
5) _Encoding_KOI8To1251 - Конвертирует кириллическую строку с KOI8-R в кодовую страницу Microsoft 1251.
6) _Encoding_ISO8859To1251 - Конвертирует кириллическую строку с ISO-8859-5 в кодовую страницу Microsoft 1251.
7) _Encoding_GetFileEncoding - Определяет кодировку файла.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Latoid [?]
Функция _WhatIsCyrillicANSIEncoding определяет ANSI кодировки: KOI8-R, WINDOWS-1251, IBM-866, ISO-8859-5
Вот не помешало бы определять тип кодировки ISO-8859-N, где N это и есть тип.
Например для такой строки:
Код:
Инструкция по установке.htm
функция возвращает ISO-8859-5, хотя это ISO-8859-1.
 

Latoid

Знающий
Сообщения
95
Репутация
11
CreatoR сказал(а):
Latoid [?]
Функция _WhatIsCyrillicANSIEncoding определяет ANSI кодировки: KOI8-R, WINDOWS-1251, IBM-866, ISO-8859-5
Вот не помешало бы определять тип кодировки ISO-8859-N, где N это и есть тип.
Например для такой строки:
Код:
Инструкция по установке.htm
функция возвращает ISO-8859-5, хотя это ISO-8859-1.
Что-то не пойму. Вот здесь http://ru.wikipedia.org/wiki/ISO-8859 из 16 ISO кодировок кириллическая только одна указана ISO 8859-5 Или название файла не по-русски? Если так, то функция изначально разрабатывалась для распознания заведомо русского текста
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Latoid [?]
из 16 ISO кодировок кириллическая только одна указана ISO 8859-5
Ну это вроде в UTF-8 изначально записано.

Или название файла не по-русски?
После раскодирования по русский :smile:
Вот так получается раскодировать:
Код:
StringFromASCIIArray(StringToASCIIArray("Инструкция по установке.htm", 0, Default, 0), 0, Default, 2)

на выходе имеем:
Код:
Инструкция по установке.htm
 

Latoid

Знающий
Сообщения
95
Репутация
11
CreatoR сказал(а):
Latoid [?]
из 16 ISO кодировок кириллическая только одна указана ISO 8859-5
Ну это вроде в UTF-8 изначально записано.

Или название файла не по-русски?
После раскодирования по русский :smile:
Вот так получается раскодировать:
Код:
StringFromASCIIArray(StringToASCIIArray("Инструкция по установке.htm", 0, Default, 0), 0, Default, 2)

на выходе имеем:
Код:
Инструкция по установке.htm
А в какой UDF эти замечательные функции обретаются )
StringToASCIIArray
StringFromASCIIArray

UPD. Похоже, пора AutoIt мне обновлять )
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
OffTopic:
Latoid
это натив
 
Верх