Страница 4 из 7

Добавлено: Вс янв 21, 2007 6:00 pm
Antarx
Мб вопрос дурацкий и я что-то не понимаю, но всё-таки есть такая проблема: в последних местных билдах при попытки загрузки macros.txt, сохранённого в UTF-8 (с помощью блокнота :wink:), кор пишет при загрузке:
Loading control/macros.txt...
control/macros.txt: ignoring line 'automacro castOnMe {' (munch, munch, strange block)
control/macros.txt: ignoring '}' (munch, munch, strange food)
Мде... короче, там после ' перед automacro потерялся вроде какой-то управляющий символ, выглядит, как точка сверху (при копировании расшифровался как #63), то есть не похож на те символы, которые пихаются в начало для UTF-8.

Отсюда вопрос: чья это бага и что с ней делать? Повторюсь, до какой-то версии это работало.

UPD: Как оказалось, оно лечится введением первой пустой строки, в смысле тогда он пишет ту же ошибку, но в кавычках только тот 63 символ, и при этом всё работает... Но всё равно хотелось бы убрать это как-нибудь, поскольку явная бага...

Добавлено: Вс янв 21, 2007 8:35 pm
kLabMouse
Antarx
Юзаем поиск. Уже оочень давно об етом писали, и решение нашли.

Добавлено: Вс янв 21, 2007 9:27 pm
Antarx
kLabMouse
Поиск юзал, но он так и не ответил, как убрать это сообщение об ошибке... Вопрос скорее в том, откуда берётся этот символ, потому как вроде не похож на начальные символы в utf, и как его убрать?..

Добавлено: Вс янв 21, 2007 9:40 pm
kLabMouse
Antarx
Ето Блокнот добавляет. Уже писалось не раз. Если поиск не рулит, то бродим по вопросам пока не найдём.
А вообще обычно просто добавлялась одна лишняя зкоментированая трочка в начале макро файла. и Всё.

Добавлено: Вс янв 21, 2007 10:36 pm
Antarx
kLabMouse
разницы, закоменченная эта строчка, или нет - я не нашёл. Кроме того, если эти 3 символа в начале utf файла удалять, ошибка будет совсем другой... Мб для перла там должны быть другие символы, чтобы он их нормально понимал? :wink:

Вопрос в другом: как этот самый злополучный символ впихнуть в Parser.pm, в смысле есть ли в перловском regexp'е спец.символ, означающий начало файла (а не ^, означающий начало строки), и как туда вставить выдающий ошибку символ (в смысле, не хотелось бы просто удалять первый символ, не зная, utf-8 файл открыт или нет)?

Сокращая всё вышенаписанное, осталось:
1) Есть ли спец. символ начала файла в regexp'е? Или можно как-то проще получить именно первый символ?
2) Можно ли проверить, открыт utf-8 файл или нет?
3) Как вставить тот самый символ, выдающий ошибку, в искомый файл?

Добавлено: Пн янв 22, 2007 5:52 am
kLabMouse
Antarx
Нужно смотреть как ВиВи поправил поддержку для самого Кора чтоб шарило всю ету хренотень.

Добавлено: Пн янв 22, 2007 7:48 am
Antarx
kLabMouse
угу... вот только вопросы остались открытыми, а ответ на любые 2 из них даёт решение проблемы методом добавления одной строчки в Parser.pm. Вопросы вообщем-то по перлу, который я не знаю совсем, а перелопачивать доку в поисках ответов на нетривиальные вопросы пока что нет ни времени, ни желания.

Неужели тут нет ни одного человека, который знает перл на уровне, достаточном для ответа на эти вопросы?

Добавлено: Пн янв 22, 2007 1:25 pm
kLabMouse
И так: находим такие две строчки. И добавим ту что выделена жирным. Должно помочь
open FILE, "<:utf8", $file or return 0;
foreach (<FILE>) {
s/{FEFF}//g;

Добавлено: Пн янв 22, 2007 2:53 pm
Antarx
угу, спасибо, вывод: утверждается, что код этого символа - FEFF. Что, похоже, неправда, потому как от фикса ничего не меняется... (я не до конца понимаю, нафига кор юзает темпы, потому на всякий случай перед тестом потёр их перед тестом => проблема не в них)
В переводе на русский: ты сам хоть проверял этот фикс?

Кстати, точно этот символ не может случайно попасться ещё где-нибудь? И ещё, нафига здесь нужен модификатор g?.. :wink:

Добавлено: Пн янв 22, 2007 3:00 pm
kLabMouse
Antarx
Я фикс спёр ещё с FileParsers.pm. Там вроде оно везде, потому подумал и сюда сунуть.


К сожелению У меня нет такой проблемы (Я не блокнотом пользуюсь).

Добавлено: Пн янв 22, 2007 3:02 pm
Antarx
kLabMouse
потрясающе... а чем тогда сохранять/какие должны быть первые 3 байта?

Добавлено: Пн янв 22, 2007 3:08 pm
kLabMouse
Antarx
Я пользуюсь EditPad Pro. Вроде пока устраивает. Что касается байтиков, не имею ни малейшего понятия.

Добавлено: Пн янв 22, 2007 3:51 pm
DInvalid
Antarx писал(а):угу, спасибо, вывод: утверждается, что код этого символа - FEFF. Что, похоже, неправда, потому как от фикса ничего не меняется...
Что у тебя в начале файло? Напиши первые байтыыыы...

Оно такое? viewtopic.php?t=447&start=18 ?

Вот что за гадость может быть вставленна в файл;

UTF-8
EF BB BF
UTF-16BE
FE FF
UTF-16LE
FF FE
Это коды вставленные в файл! Но когда мы считываем файл, то
мы не получаем непосредственно эти коды.
Мы получаем код:
Unicode 65279 = 0xFEFF

так что это должно работать

s/\x{FEFF}//g;
модификатор g - заменять все вхождения. на всякий.

П.С.
:oops:
Маус, у тебя вроде ошибка в регэекспе...

Добавлено: Пн янв 22, 2007 9:41 pm
Antarx
DInvalid
угу, только одна беда - затирание этих 3 байт давало ошибку загрузки throw в XKore.CannotStart...

Спасибо, теперь работает... Неприятно только, что ещё 3 года назад такой глупости с регэкспами не делал... Короче, спасибо!
Единственное, что: вроде этот символ идёт первым в файле, потому если он по каким-либо причинам попадётся ещё раз - это будет нехорошо... Можно как-нибудь поправить так, чтобы он только 1 раз в файле находил, а лучше чтобы только в начале? (конечно, как я понимаю, можно написать s/^\x{FEFF}//g;, но хотелось бы нормальное решение...)

kLabMouse
Посмотреть байтики занимает меньше минуты, если есть на машине хоть один хекс-редактор...

PS Хоть в билд добавьте - ценных фикс :wink:

Добавлено: Пн янв 22, 2007 9:46 pm
Kolpak
Вот же вы любите все усложнять)
поставь в макрос.тхт первую строчку коментарий
и все будет ок

------
#
macro....{
.
.
}
------