LINUX.ORG.RU

wakaba error on raspberrypi

 , ,


0

1

wakaba 3.0.8

при попытке создать тред:

Software error:

Malformed UTF-8 character (fatal) at wakautils.pl line 41.

в вакабе много кастомизации сделанной одним из предыдущих админов. он шарил в перле, но растворился куда-то.

еще один нюанс: вакаба работала на gentoo которая не обновлялась больше года, вчера я перенес ее на paspberry с дебианом последним стабильным и вот такая вот ерунда вышла.

ничего определенного не гуглится. локаль - юникод, база на распберри - юникод, дефолт чарсет апача - юникод. там работало, а здесь не работает.

меня пипл в мозг клюет, неловко как-то. с колокейшна выгнали за неуплату, давно обещал на распберри поднять. поднял, да не совсем. попробовать можно здесь: http://chaos.fm/b/



Последнее исправление: cetjs2 (всего исправлений: 1)

какой шебанг? аргумент -CS есть?

Обнови perl для начала, до версии 5.18 хотя бы, подозреваю он совсем древний там

disarmer ★★★
()
Ответ на: комментарий от disarmer

какой шебанг?

а что это?

аргумент -CS есть?

для интерпретатора? а как его прописать и что он делает? в мане к перлу нету, гугл навскидку тоже ничего не выдает.

до версии 5.18 хотя бы

v5.14.2. из бэкпортов? а оно точно того стоит? сейчас проверил - там где все работало был v5.12.4

n0153
() автор топика
Ответ на: комментарий от n0153

shebang это первая строка, начинающаяся с #!, которая рассказывает системе, с помощью чего запускать скрипт

в мане к перлу нету

man perlrun The -C flag controls some of the Perl Unicode features.

а оно точно того стоит?

Тогда нет, значит гента не обновлялась сильно больше года, 5.12 это из далёкого 2010-2011

Если добавление флага в shebang не поможет, то надо смотреть в код

disarmer ★★★
()
Ответ на: комментарий от disarmer

shebang это первая строка, начинающаяся с #!, которая рассказывает системе, с помощью чего запускать скрипт

непосредственно в том файле она отсутствует, но я так понимаю что функции описанные в этом файле вызываются из wakaba.pl, где шебанг следующий: #!/usr/bin/perl

добавляем в него -CS и получаем уже другую ошибку:

Cannot decode string with wide characters at /usr/lib/perl/5.14/Encode.pm line 174.

Тогда нет, значит гента не обновлялась сильно больше года, 5.12 это из далёкого 2010-2011

так и есть

Если добавление флага в shebang не поможет, то надо смотреть в код

ошибка указывает на библиотечную функцию. на что грешить теперь?

n0153
() автор топика
Ответ на: комментарий от n0153

ошибка указывает на библиотечную функцию. на что грешить теперь?

Encode падает потому что на вход подаётся в неправильной кодировке.

Тогда два варианта, либо вернуть окружение к тому, в котором работало, либо раскручивать код (хотя бы убедиться что в самое начало всё приходит в нужной кодировке)

disarmer ★★★
()
Ответ на: комментарий от disarmer

я другого не понимаю, а почему оно валится от другой кодировки? в моем понимании от другой кодировки софт обязан показывать кракозябры, квадратики, вопросики - все что угодно. даже если другая байтность у кодировки. как оно вообще это детектит?

n0153
() автор топика
Ответ на: комментарий от n0153

Например «Malformed UTF-8 character» возникает при обработке последовательностей байт, которые не соответствуют символам в utf. В utf-8 на один символ приходится разное количество байт, пропустив один или несколько, невозможно будет правильно декодировать строку дальше(не знаем где граница символа)

Кракозябры, квадратики, вопросики появляются в случае других кодировок, в utf такие проблемы фатальны (например в БД такие данные тоже не вставить).

как оно вообще это детектит?

perl не детектит на что похожа строка, он возвращает ошибку при попытке сделать из набора байт utf-8 строку. Определить кодировку можно только эвристически (enca например).

Вообще в perl почти эталонная поддержка unicode, проблема скорее всего решится изменением одной-двух строк, скорее всего в части обработки данных от пользователя

disarmer ★★★
()
Последнее исправление: disarmer (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.