Scripts discussion (1)
- Author
- Message
-
Offline
- Posts: 139
- Joined: Fri Feb 12, 2010 11:33 am
Infocatcher,
Вот тут маленький эксперимент, если интересно:
Слово пример сохранил в трёх разных кодировках: cp1251,cp866,utf8.
В cp1251 - при открытии кодировка документа определилась правильно.
HexSel с включённым флагом "Автоматически" - порядок байт исходный (как в файле).
В cp866 - при открытии кодировка не определилась, документ открылся как cp1251.
HexSel с включённым флагом "Автоматически" - порядок байт исходный (как в файле).
В utf-8 - специально открыл документ как cp1251.
HexSel с включённым флагом "Автоматически" - порядок байт исходный (как в файле).
Вот тут маленький эксперимент, если интересно:
Слово пример сохранил в трёх разных кодировках: cp1251,cp866,utf8.
В cp1251 - при открытии кодировка документа определилась правильно.
HexSel с включённым флагом "Автоматически" - порядок байт исходный (как в файле).
В cp866 - при открытии кодировка не определилась, документ открылся как cp1251.
HexSel с включённым флагом "Автоматически" - порядок байт исходный (как в файле).
В utf-8 - специально открыл документ как cp1251.
HexSel с включённым флагом "Автоматически" - порядок байт исходный (как в файле).
-
Offline
- Posts: 2248
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
Не правильно определенная кодировка - отдельный разговор. И тем не менее, для Акела это уже не "пример" а шесть других символов.В cp866 - при открытии кодировка не определилась, документ открылся как cp1251.
Вообще-то хеш работает с произвольным набором байт, потому в контексте чистого текстового редактора говорить о хешах можно только с огромными оговорками.
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Еще бы памяти поменьше кушало...Fr0sT wrote:Да, см. у меня в Base64, вроде бы нормально работает.
Причем странно – если попробовать разбить строку на части, то начинает падать. Или я что-то не так делаю.
getHash-test.js
Пытается перекодировать в текущую кодировку (и никак не обрабатывает возможные ошибки).
-
Offline
- Posts: 876
- Joined: Tue Jul 24, 2007 8:54 am
Infocatcher
По идее, при перекодировке из utf16 всё должно быть более-менее нормально, там даже если суррогатная пара будет разорвана - ничего страшного (хотя не уверен, преобразует ли WCtoMB строку, начинающуюся со второй половины суррогатной пары?). Видимо, где-то вылезаешь за границу буфера или перепутал символы с байтами.если попробовать разбить строку на части, то начинает падать
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Fr0sT
getHash-test.js
Исправлено перекодирование, добавлен расчет CRC32 (вроде бы, считает правильно, но пришлось угадывать, как получить «общепринятую» шестнадцатеричную строку.
AESCrypt.js
Все-таки сделал оба варианта запроса пароля модальными, предупреждение об отсутствии текста теперь выдается до обоих вариантов диалога.
insertEval.js
Исправлено определение специальных выражений вида «=expression».
Плюс реализовано получение текста без его предварительного выделения.
Я про нулевой символ в конце строки забыл.Видимо, где-то вылезаешь за границу буфера или перепутал символы с байтами.
getHash-test.js
Исправлено перекодирование, добавлен расчет CRC32 (вроде бы, считает правильно, но пришлось угадывать, как получить «общепринятую» шестнадцатеричную строку.
AESCrypt.js
Все-таки сделал оба варианта запроса пароля модальными, предупреждение об отсутствии текста теперь выдается до обоих вариантов диалога.
insertEval.js
Исправлено определение специальных выражений вида «=expression».
Как-то так: LinesFilter_mod2.jsInfocatcher wrote:Может быть, есть смысл заменить replace/match на разбивку на строки и последующую проверку – тогда можно будет оперировать флагом начала строки, например «/(^|\s)something/».
Тогда для регулярных выражений можно просто отключать галочки, определяющие добавление «^.*» и «.*$» (и не добавлять флаги начала/окончания вообще).
Плюс реализовано получение текста без его предварительного выделения.
-
Offline
- Posts: 2248
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
Я то туда заглянул, но только от этого понятнее не стало(даже по ссылке внутри скрипта прошел): какой образующий полном используется в данной реализации CRC32? (матчасть: "порождающий или образующих 32битных полиномов" есть минимум 4 + Adler который не являясь CRC32 постоянно вертится вокруг остальных CRC32-проверок их равноправная полиномиальная разновидность.)getHash-test.js
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
FeyFre
Матчасть я как-то читал, ага.
Результат совпадает с тем, что выдает Total Commander.
Матчасть я как-то читал, ага.
Результат совпадает с тем, что выдает Total Commander.
Last edited by Infocatcher on Sat Dec 18, 2010 2:38 am, edited 1 time in total.
-
Offline
- Posts: 139
- Joined: Fri Feb 12, 2010 11:33 am
Infocatcher,
По converter.js ("URI", "URIComponent"):
Есть ссылки вида:
Должно получится:
Не раскодирует, пишет "Обнаружена недопустимая кодировка...".
По converter.js ("URI", "URIComponent"):
Есть ссылки вида:
Code: Select all
ftp://primer.servera.ru/VIDEO/+Uploaded/P.S.%20%DF%20%EB%FE%E1%EB%FE%20%F2%E5%E1%FF%20-%20P.S.%20I%20Love%20You%20(2007,%20DVDRip).avi
Code: Select all
ftp://primer.servera.ru/VIDEO/+Uploaded/P.S. Я люблю тебя - P.S. I Love You (2007, DVDRip).avi
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Встроенные decodeURI и decodeURIComponent ожидают UTF-8, а получают windows-1251.Deim0s wrote:Не раскодирует, пишет "Обнаружена недопустимая кодировка...".
http://ru.wikipedia.org/wiki/URL#.D0.9A ... .D0.B5_URL
Можно заменить decodeURIComponent на
Code: Select all
function decodeURIComponentWrapper(str) {
try {
return decodeURIComponent(str);
}
catch(e) {
return str.replace(
/%([0-9a-f]{4}|[0-9a-f]{2})/ig,
function(s, hex) {
return String.fromCharCode(parseInt(hex, 16));
}
);
}
}
Code: Select all
ftp://primer.servera.ru/VIDEO/+Uploaded/P.S. ß ëþáëþ òåáÿ - P.S. I Love You (2007,VDRip).avi
-
Offline
- Posts: 139
- Joined: Fri Feb 12, 2010 11:33 am
Infocatcher,
В Firefox есть опция по этому поводу (network.standard-url.encode-utf8 - false), сложно её реализовать в этом скрипте (тоже в качестве опции)?
Ещё несколько вопросов по HTML Entities:
Добавлять свои можно сюда?
.replace(/своё/g, "своё")
Есть ли какие ограничения? На количество (ну там не стабильно работать начнёт и т.д.)? Если к примеру добавить всё от сюда?
Извиняюсь если плохо искал, но сразу не нашёл, в каких кодировках AkelPad прочтёт скрипты (utf-16le, utf-8 )? Это, если я к примеру добавлю:
.replace(/♣/g, "♣")
Если можно, чуть подробнее.Можно заменить decodeURIComponent на:
В Firefox есть опция по этому поводу (network.standard-url.encode-utf8 - false), сложно её реализовать в этом скрипте (тоже в качестве опции)?
Ещё несколько вопросов по HTML Entities:
Добавлять свои можно сюда?
.replace(/своё/g, "своё")
Есть ли какие ограничения? На количество (ну там не стабильно работать начнёт и т.д.)? Если к примеру добавить всё от сюда?
Извиняюсь если плохо искал, но сразу не нашёл, в каких кодировках AkelPad прочтёт скрипты (utf-16le, utf-8 )? Это, если я к примеру добавлю:
.replace(/♣/g, "♣")
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Deim0s
Но я пока не понял, как раскодировать полученный результат.

Там же еще network.standard-url.encode-query-utf8 и network.standard-url.escape-utf8 есть.
Разве что делать выборочное кодирование типа вот такого:
http://ru.wikipedia.org/wiki/Рекорд_мира_по_прыжкам_в_высоту_%28мужчины%29
и
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D0%BE%D1%80%D0%B4_%D0%BC%D0%B8%D1%80%D0%B0_%D0%BF%D0%BE_%D0%BF%D1%80%D1%8B%D0%B6%D0%BA%D0%B0%D0%BC_%D0%B2_%D0%B2%D1%8B%D1%81%D0%BE%D1%82%D1%83_%28%D0%BC%D1%83%D0%B6%D1%87%D0%B8%D0%BD%D1%8B%29
Можно из Firefox утянуть:
Mozilla Firefox\res\dtd\
Mozilla Firefox\res\entityTables\
Это можно. Плюс, обязательно опция для кодирования. И, пожалуй, для декодирования.

[Upd]
Собственно, чего уж там, вот прототип, конвертирующий entities (пока только xhtml11.dtd): converter-test.js
Сущности задаются в объекте
Плюс параметры/аргументы -decodeSpecialEntities и -encodeSpecialEntities.
[Upd – 2]
Заодно подправил, чтобы  и �xffff; декодировались, а 𐀀 и 𐀀 – уже нет.
Приблизительно так: converter-test.jsЕсли можно, чуть подробнее.
Но я пока не понял, как раскодировать полученный результат.

http://kb.mozillazine.org/Network.stand ... ncode-utf8В Firefox есть опция по этому поводу (network.standard-url.encode-utf8 - false), сложно её реализовать в этом скрипте (тоже в качестве опции)?
Звучит довольно муторно.IE and Opera, contrary to the specification, encode the path part of the URL in UTF-8 but encode the query string part of the URL in the encoding of the referring page.

Там же еще network.standard-url.encode-query-utf8 и network.standard-url.escape-utf8 есть.
Разве что делать выборочное кодирование типа вот такого:
http://ru.wikipedia.org/wiki/Рекорд_мира_по_прыжкам_в_высоту_%28мужчины%29
и
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D0%BE%D1%80%D0%B4_%D0%BC%D0%B8%D1%80%D0%B0_%D0%BF%D0%BE_%D0%BF%D1%80%D1%8B%D0%B6%D0%BA%D0%B0%D0%BC_%D0%B2_%D0%B2%D1%8B%D1%81%D0%BE%D1%82%D1%83_%28%D0%BC%D1%83%D0%B6%D1%87%D0%B8%D0%BD%D1%8B%29
Ну да, можно добавлять в function encodeHTML(str) и function decodeHTML(str).Ещё несколько вопросов по HTML Entities:
Добавлять свои можно сюда?
Ну, чем больше замен, тем медленнее. Но все равно должно быть быстрее, чем всякие там хэши вычислять.Deim0s wrote:Есть ли какие ограничения? На количество (ну там не стабильно работать начнёт и т.д.)? Если к примеру добавить всё от сюда?
Можно из Firefox утянуть:
Mozilla Firefox\res\dtd\
Mozilla Firefox\res\entityTables\
Это можно. Плюс, обязательно опция для кодирования. И, пожалуй, для декодирования.
viewtopic.php?p=10324#p10324:Извиняюсь если плохо искал, но сразу не нашёл, в каких кодировках AkelPad прочтёт скрипты (utf-16le, utf-8 )?
Вроде бы, сейчас AkelPad сам читает файлы скриптов, потому как wscript.exe не понимает UTF-8 с BOM, тогда как такие скрипты можно запускать. А вот UTF-16 уже работает и там, и там, но это все в юникодных ОС. Так что пусть лучше автор сам ответит.Infocatcher wrote:И хорошо бы вот это исследовать. Гораздо практичнее хранить скрипты в UTF8/16.

Универсальнее всего – \u2663 ("♣".charCodeAt(0).toString(16)) или, для двузначных кодов, – \xab для "«". Примерно это и происходит при -type="Escapes", но с некоторыми исключениями – см. function encodeEscapes(str) { ... }..replace(/♣/g, "♣")
[Upd]
Собственно, чего уж там, вот прототип, конвертирующий entities (пока только xhtml11.dtd): converter-test.js
Сущности задаются в объекте
Code: Select all
var specialEntities = {
entity0: "char0",
entity1: "char1"
};
[Upd – 2]
Заодно подправил, чтобы  и �xffff; декодировались, а 𐀀 и 𐀀 – уже нет.
Last edited by Infocatcher on Sat Dec 18, 2010 10:30 pm, edited 1 time in total.
-
Offline
- Posts: 139
- Joined: Fri Feb 12, 2010 11:33 am
Infocatcher,
. Потом, можно пройтись ещё раз, в "нормальном" режиме. Ещё, посмотрите PSPad, он вроде раскодирует всё что угодно (URL -> ANSI), исходники закрыты правда.
Если получится раскодировать - наверное, самый хороший вариант.Но я пока не понял, как раскодировать полученный результат.
Ну как вариант, лучше чем ничегоРазве что делать выборочное кодирование типа вот такого:

Я так понял, сейчас, в UTF-8 без BOM можно смело сохранять? В принципе этого и достаточно почти для всех нужд. А так конечно в utf-16le получше было бы, да и с сигнатурой ИМХО понадёжней как то.Вроде бы, сейчас AkelPad сам читает файлы скриптов, потому как wscript.exe не понимает UTF-8 с BOM, тогда как такие скрипты можно запускать. А вот UTF-16 уже работает и там, и там, но это все в юникодных ОС. Так что пусть лучше автор сам ответит.
Пойду пробовать.Универсальнее всего –
-
Offline
- Posts: 1873
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
Deim0s
А вот wscript.exe все равно будет ругаться в обоих случаях:
Нет, именно с BOM, без BOM кодировка не определится.Я так понял, сейчас, в UTF-8 без BOM можно смело сохранять?
А вот wscript.exe все равно будет ругаться в обоих случаях:
Правда, это понятнее, чемОшибка: 'AkelPad' - определение отсутствует
для UTF-8 c BOM.Ошибка: 'п»ї' - определение отсутствует