Что нового

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

Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Вообще хотелось бы иметь под рукой универсальную функцию, которая могла бы определять любой тип кодировок, и соответственно на её основе можно было бы сделать функцию для конвертирования указанной кодировки в любую, и обратно.
 

Latoid

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

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
CreatoR
Подскажи, пожалуйста, почему данное перекодирование не дает в результате "Пробное письмо"... Проверял на указанном онлайн-сервисе - там получается...

Код:
#Include <Encoding.au3>
 MsgBox(0,"",_Encoding_KOI8To1251(_Encoding_Base64Decode("8NLPws7PxSDQydPYzc8")))
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
snoitaleR [?]
почему данное перекодирование не дает в результате "Пробное письмо"
У меня выдаёт «"Пробное пись» ;D
Также и на сервисе.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
CreatoR
Я бы посмеялся, но не до смеха... Тут какой-то казус...
Прикладываю скриншот...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
snoitaleR [?]
Тут какой-то казус
Я поверял с тем что мне выдала функция _Encoding_Base64Decode, видимо в ней есть проблема...


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

[?]
видимо в ней есть проблема
Проблема в длине возвращаемой строки, нужно добавить «+ 2» к «$Ret[0]».
 

ak40u

Знающий
Сообщения
33
Репутация
7
* Декодер http://web.artlebedev.ru/tools/decoder/

* Можно добавить функцию конвертации cp1251 в utf8 и назад.
Взял с http://mihalytch.org.ua/programming/php/convert-cp1251-utf8.html

По ней вопрос:
Кодирование не всегда срабатывает, не могу понять почему.
Код:
#include <INet.au3>
#include <encoding.au3> ; туда я засунул функцию _Encoding_Cp1251ToUtf8
$sHtml = _INetGetSource ("http://autoit-script.ru/index.php")
_Encoding_Cp1251ToUtf8 ($sHtml)
MsgBox(0,'',$sHtml)
Код:
#include <INet.au3>
#include <encoding.au3>
$sHtml = "двери деревянные  <sample words>"
_Encoding_Cp1251ToUtf8 ($sHtml)
MsgBox(0,'',$sHtml)




Код:
func _Encoding_Cp1251ToUtf8 ($txt)
   Dim $in_arr[66] = [ _
       Chr(208), Chr(192), Chr(193), Chr(194), _
       Chr(195), Chr(196), Chr(197), Chr(168), _
       Chr(198), Chr(199), Chr(200), Chr(201), _
       Chr(202), Chr(203), Chr(204), Chr(205), _
       Chr(206), Chr(207), Chr(209), Chr(210), _
       Chr(211), Chr(212), Chr(213), Chr(214), _
       Chr(215), Chr(216), Chr(217), Chr(218), _
       Chr(219), Chr(220), Chr(221), Chr(222), _
       Chr(223), Chr(224), Chr(225), Chr(226), _
       Chr(227), Chr(228), Chr(229), Chr(184), _
       Chr(230), Chr(231), Chr(232), Chr(233), _
       Chr(234), Chr(235), Chr(236), Chr(237), _
       Chr(238), Chr(239), Chr(240), Chr(241), _
       Chr(242), Chr(243), Chr(244), Chr(245), _
       Chr(246), Chr(247), Chr(248), Chr(249), _
       Chr(250), Chr(251), Chr(252), Chr(253), _
       Chr(254), Chr(255)]

   Dim $out_arr[66] = [ _
       Chr(208)&Chr(160), Chr(208)&Chr(144), Chr(208)&Chr(145), _
       Chr(208)&Chr(146), Chr(208)&Chr(147), Chr(208)&Chr(148), _
       Chr(208)&Chr(149), Chr(208)&Chr(129), Chr(208)&Chr(150), _
       Chr(208)&Chr(151), Chr(208)&Chr(152), Chr(208)&Chr(153), _
       Chr(208)&Chr(154), Chr(208)&Chr(155), Chr(208)&Chr(156), _
       Chr(208)&Chr(157), Chr(208)&Chr(158), Chr(208)&Chr(159), _
       Chr(208)&Chr(161), Chr(208)&Chr(162), Chr(208)&Chr(163), _
       Chr(208)&Chr(164), Chr(208)&Chr(165), Chr(208)&Chr(166), _
       Chr(208)&Chr(167), Chr(208)&Chr(168), Chr(208)&Chr(169), _
       Chr(208)&Chr(170), Chr(208)&Chr(171), Chr(208)&Chr(172), _
       Chr(208)&Chr(173), Chr(208)&Chr(174), Chr(208)&Chr(175), _
       Chr(208)&Chr(176), Chr(208)&Chr(177), Chr(208)&Chr(178), _
       Chr(208)&Chr(179), Chr(208)&Chr(180), Chr(208)&Chr(181), _
       Chr(209)&Chr(145), Chr(208)&Chr(182), Chr(208)&Chr(183), _
       Chr(208)&Chr(184), Chr(208)&Chr(185), Chr(208)&Chr(186), _
       Chr(208)&Chr(187), Chr(208)&Chr(188), Chr(208)&Chr(189), _
       Chr(208)&Chr(190), Chr(208)&Chr(191), Chr(209)&Chr(128), _
       Chr(209)&Chr(129), Chr(209)&Chr(130), Chr(209)&Chr(131), _
       Chr(209)&Chr(132), Chr(209)&Chr(133), Chr(209)&Chr(134), _
       Chr(209)&Chr(135), Chr(209)&Chr(136), Chr(209)&Chr(137), _
       Chr(209)&Chr(138), Chr(209)&Chr(139), Chr(209)&Chr(140), _
       Chr(209)&Chr(141), Chr(209)&Chr(142), Chr(209)&Chr(143)]
    $txt = StringReplace($in_arr,$out_arr,$txt)
   Return $txt
   EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ak40u
А чем Вам не нравятся штатные функции Encoding.au3?
Код:
#include <Encoding.au3>

$sString1251 = 'двери деревянные'
$sStringUTF8 = _Encoding_StringToUTF8($sString1251)
MsgBox(0, '', 'Оригинал: ' & $sString1251 & @LF & 'UTF8: ' & $sStringUTF8 & @LF & _
		'1251: ' & _Encoding_UTF8ToANSI($sStringUTF8))


PS
Ваша функция не работает и еще в ней 2 ошибки:
1. Не правильно $txt = StringReplace($in_arr,$out_arr,$txt), правильно
$txt = StringReplace ($txt, "searchstring/start", "replacestring" [, occurrence [, casesense]] )
2. StringReplace() не заменяет массивы. Надо так:
Код:
;...
For $i = 0 To 65
	$txt = StringReplace($txt, $in_arr[$i], $out_arr[$i])
Next
;...
Например:
Код:
Dim $aFirst[3] = ['1', '2', '3']
Dim $aSecond[3] = [' 11 ', ' 22 ', ' 33 ']
$sString = '231321'
For $i = 0 To 2
	$sString = StringReplace($sString, $aFirst[$i], $aSecond[$i])
Next
MsgBox(0, '', $sString)


PPS
В Примерах 1 и 2 у Вас тоже ошибка:
Код:
;Не правильно:
$sHtml = "двери деревянные  <sample words>"
_Encoding_Cp1251ToUtf8 ($sHtml)
MsgBox(0,'',$sHtml)
;Правильно:
$sHtml = "двери деревянные  <sample words>"
$sHtml = _Encoding_Cp1251ToUtf8 ($sHtml)
MsgBox(0,'',$sHtml)
Закомментируйте строку
Код:
;...
;_Encoding_Cp1251ToUtf8 ($sHtml)
;...
В Вашем примере - ничего не изменится.
 

ak40u

Знающий
Сообщения
33
Репутация
7
Я не думал что _Encoding_UTF8ToANSI сможет мне помочь. Спасибо, неработающую функцию оставлю в покое
 

sayman

Новичок
Сообщения
13
Репутация
0
Код:
АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя
исходная строка

Код:
�����������娸������������������������������������������������
имеем такую кодировку

как с нормальным текстом в аутоите можно сотворить такое ?

p.s. это post запрос
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Обновление (с запозданием почти в год :whistle:smile:.

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

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

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

andreitrane

Новичок
Сообщения
141
Репутация
3
[Ошибки] не работает encoding.au3

надеюсь написал в правильном разделе, если нет то перенесите))

после того как обновился на версию 3.3.7.2, у меня стали отказываться работать программы, использующие encoding.au3

при включении вылезает ошибка
Код:
#include <Encoding.au3>

Error: Error opening the file.

до обновления все работало отлично, сейчас проверил, файл на месте, ничего не изменилось кроме версии автоит
пожалуйста переделайте Encoding.au3 или, если дело не в нем, подскажите что делать, буду благодарен)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Re: [Ошибки] не работает encoding.au3

хм... а разве бета не ставится в отдельную папку? найди ее, там будет своя папка include, туда надо засунуть encoding.au3. и да, ты не в том разделе отписался. encoding.au3 не входит в стандартную поставку, и не может претендовать на баг самого языка
 

andreitrane

Новичок
Сообщения
141
Репутация
3
Re: [Ошибки] не работает encoding.au3

Kaster
спасибо)
только хотел отписаться что если запускать исходник, то вылезает ошибка, а если запускать через AutoIt3.exe, то все отлично, но потом нашел папку beta)
[?]
да, ты не в том разделе отписался

тогда можно удалять тему
 

kaster

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

La2Angel

Новичок
Сообщения
156
Репутация
1
Проблемка:smile:)) microsoft security essentials - считает данную библиотеку за вирус при компиляции.
Подробнее: Критическая угроза! Действия: немедленно удалить! Данный файл используют при написании вирусов!
 
Верх