Что нового

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

Автор
CreatoR

CreatoR

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

* Как должна работать функция конвертирования в URI (URLToHex), в некоторых местах замечал что точки и там всякого рода знаки пунктуации не конвертируются, но иногда это нужно, как быть?
* Какой лучше всего оставить метод для Base64?
* Как правильно назвать функции *JavaUnicode*?
* Стоит ли использовать в функциях внешние ресурсы, типа ScriptControl, онлайн конвертация?

Пока всё :smile:.
 

rafzak

Новичок
Сообщения
27
Репутация
1
Помогите пожалуйста с конвертацией строк такого типа:
Код:
data/Справочник.ВнутренниеДокументы?ref=be3a2c768a4f457411e94c7e8c9770ed

Сам запилил:
Код:
Func _Encoding_CP1252ToUTF8($sString)
$binstr = StringToBinary($sString, 4)
$binstr = StringReplace($binstr, "E282AC", "C280")
$binstr = StringReplace($binstr, "E2809A", "C282")
$binstr = StringReplace($binstr, "C692", "C283")
$binstr = StringReplace($binstr, "E2809E", "C284")
$binstr = StringReplace($binstr, "E280A6", "C285")
$binstr = StringReplace($binstr, "E280A0", "C286")
$binstr = StringReplace($binstr, "E280A1", "C287")
$binstr = StringReplace($binstr, "CB86", "C288")
$binstr = StringReplace($binstr, "E280B0", "C289")
$binstr = StringReplace($binstr, "C5A0", "C28A")
$binstr = StringReplace($binstr, "E280B9", "C28B")
$binstr = StringReplace($binstr, "C592", "C28C")
$binstr = StringReplace($binstr, "C5BD", "C28E")
$binstr = StringReplace($binstr, "E28098", "C291")
$binstr = StringReplace($binstr, "E28099", "C292")
$binstr = StringReplace($binstr, "E2809C", "C293")
$binstr = StringReplace($binstr, "E2809D", "C294")
$binstr = StringReplace($binstr, "E280A2", "C295")
$binstr = StringReplace($binstr, "E28093", "C296")
$binstr = StringReplace($binstr, "E28094", "C297")
$binstr = StringReplace($binstr, "CB9C", "C298")
$binstr = StringReplace($binstr, "E284A2", "C299")
$binstr = StringReplace($binstr, "C5A1", "C29A")
$binstr = StringReplace($binstr, "E280BA", "C29B")
$binstr = StringReplace($binstr, "C593", "C29C")
$binstr = StringReplace($binstr, "C5BE", "C29E")
$binstr = StringReplace($binstr, "C5B8", "C29F")
$binstr =  BinaryToString($binstr,4)
$binstr = StringToASCIIArray($binstr, 0, Default, 0)
$sResult = StringFromASCIIArray($binstr,0,default,2)
	Return $sResult
EndFunc ;==>_Encoding_CP1252ToUTF8
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Интересно, можно же наверное как то написать функцию для автоматического определения кодировки, и конвертация в соответствующую?
Вот тут это успешно работает...
 

Norm

Продвинутый
Сообщения
291
Репутация
76
Есть ли у кого этот Encoding UDF
В шапке темы при переходе по ссылке попадаю на главную страницу форума

Заранее благодарю
 

modnik

Знающий
Сообщения
138
Репутация
13
Всем привет!

Использую _Encoding_URIDecode, всё работает отлично x32
Однако если запускаю скрипт через #AutoIt3Wrapper_UseX64, то декод перестаёт работать?
Можно ли как то пофиксить?( использую в скритпе библиотеки, которые работают только х32)
 

Ciber SLasH

Новичок
Сообщения
13
Репутация
0
Не работает _Encoding_GetFileEncoding на UTF8 без BOM.
Exit(_Encoding_GetFileEncoding($CmdLine[1])) возвращает 0 на таком файле:
 

Вложения

  • pinout_u.rar
    502 байт · Просмотры: 2
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
А вообще уже давно есть встроенная FileGetEncoding.
 

Sulfur

Новичок
Сообщения
1
Репутация
0
не подскажете, я в консоль ConsoleWrite вывожу названия кнопок в систем трее и выводится абракадабра на WIN-1251.
Например "Áåçîïàñíîñòü Windows - Òðåáóþòñÿ äåéñòâèÿ."
Как-то ее можно в кириллицу перекодировать?
Или консоль SciTE в принципе кириллицу не выводит?
Я все функции перепробовал, не нашел нужной.
console.JPG
Сообщение автоматически объединено:

помогло вот это http://autoit-script.ru/threads/konsol-zabyla-russkij-jazyk.20955/post-146791
 
Последнее редактирование:

vivernet

Знающий
Сообщения
32
Репутация
6
вроде все полностью пересмотрел, но на всякий: как понял из GB2312 этим не конвертировать?
 

roma351234567890

Новичок
Сообщения
20
Репутация
0
Получаю строку из буфера обмена. Если я ее вставляю в файл, то файл получается в кодировке utf-8.
Код:
FileWriteLine ( "1.txt", ClipGet())

Хочу получить в 1251.
Код:
$buffer=_Encoding_UTF8ToANSI (ClipGet())
FileWriteLine ( "UTF8ToANSI.txt", $buffer)

$buffer=_Encoding_UTF8ToANSI_API (ClipGet())
FileWriteLine ( "UTF8ToANSI_API.txt", $buffer)

$buffer=_Encoding_UTF8BOMDecode (ClipGet())
FileWriteLine ( "UTF8BOMDecode.txt", $buffer)

$buffer=_Encoding_UTF8ToUnicode_API (ClipGet())
FileWriteLine ( "UTF8ToUnicode_API.txt", $buffer)

Получаю кракозябры, что не так делаю?
Файлы прилагаются.
Сообщение автоматически объединено:

Короче... Если в файле будет хотя бы одна Кириллическая буква и сам текст сохранен в 1251, то текст будет сохраняться в 1251,а если нет , то в utf 8 Команда FileWriteLine
 

Вложения

  • 1.txt
    118 байт · Просмотры: 2
  • UTF8BOMDecode.txt
    118 байт · Просмотры: 1
  • UTF8ToANSI.txt
    158 байт · Просмотры: 0
  • UTF8ToANSI_API.txt
    78 байт · Просмотры: 0
  • UTF8ToUnicode_API.txt
    158 байт · Просмотры: 0
Последнее редактирование:

Norm

Продвинутый
Сообщения
291
Репутация
76
А Вы не пробовали это решить через FileOpen ?
Код:
$iFile = FileOpen("1.txt",  512)
FileWriteLine( $iFile, ClipGet())
 

roma351234567890

Новичок
Сообщения
20
Репутация
0
А Вы не пробовали это решить через FileOpen ?
Код:
$iFile = FileOpen("1.txt",  512)
FileWriteLine( $iFile, ClipGet())
ваш пример с ошибкой
Код:
$iFile = FileOpen("1.txt",  512)
FileWriteLine("1.txt", "Привет")

То же самое. Стоит в файл поместить хотя бы одну кириллическую букву и сохранить его в 1251, как скрипт правильно помещает в этот файл кириллицу. Если файл пустой, то упорно пишет в utf 8.
 

roma351234567890

Новичок
Сообщения
20
Репутация
0
Код:
$iFile = FileOpen("11.txt",  514)
FileWriteLine( $iFile, "Привет")

Вот так уже сработало. И кодировка норм.
 
Сообщения
80
Репутация
-1
При выполнении кода

Код:
FileOpen(@ScriptDir & "\1.txt", 2)
    FileWrite(@ScriptDir & "\1.txt", $2o)


Появляются крякозябры типа: Второй текст 1
И в кодировке UTF

Как здесь поставить кодировку ANSI и чтобы текст был русским ?
(как использовать данную udf в этом случае?)
 
Верх