ynbIpb
Скриптер
- Сообщения
- 399
- Репутация
- 110
Re: ICQ DLL
хм... Хитрость какаята. Ну ладно значит проблема в моей системе.
Тут возникла другая трабла:
На сколько известно сообщение отправляемое ботом не может превышать 2500 байт приблизительно.
Решил я его резать если оно длиннее, но вот проблема, я юзаю UTF-8, а там 1 русская буква занимает 2 байта и при нарезке бывает, что разрезается 1 буква на части. Из-за этого целый кусок превращается в кракозябры, так как сбит порядок байт. Необходимо как-то идентифицировать конец буквы и только тогда отрезать текст. Есть мысли?
StringLen в случае с UTF-8 возвращает не количество букв, а количество байт.
хм... Хитрость какаята. Ну ладно значит проблема в моей системе.
Тут возникла другая трабла:
На сколько известно сообщение отправляемое ботом не может превышать 2500 байт приблизительно.
Решил я его резать если оно длиннее, но вот проблема, я юзаю UTF-8, а там 1 русская буква занимает 2 байта и при нарезке бывает, что разрезается 1 буква на части. Из-за этого целый кусок превращается в кракозябры, так как сбит порядок байт. Необходимо как-то идентифицировать конец буквы и только тогда отрезать текст. Есть мысли?
Код:
#include <Encoding.au3>
Func _sendanswer($answer, $recipient); функция отправки ответ хозяину бота: 1 парметр - текст, 2 - UIN получателя
$sUTF8_answer = _Encoding_StringToUTF8($answer); преобразуем в UTF-8
$len_msg = StringLen ($sUTF8_answer); определяем длинну строки
If $len_msg >= 2500 Then ; если строка длиннее 2500 символов, то отсылаем по частям.
$i = 1
While 1 ; крутим цикл пока не кончится текст
$cutting = StringMid($sUTF8_answer, $i, 2500)
If $cutting = "" Then ExitLoop
ICQSendMsg($recipient, $cutting)
sleep (2000); пауза 2 сек, чтоб не забанили за массовую рассылку
$i += 2500
WEnd
Else ; иначе отправляем в обычном режиме
ICQSendMsg($recipient, $sUTF8_answer)
EndIf
EndFunc
StringLen в случае с UTF-8 возвращает не количество букв, а количество байт.