BeBot - An Anarchy Online and Age Of Conan chat automaton
Archive => Anarchy Online Archive => BeBot 0.2 support => Topic started by: Brianich on December 04, 2006, 03:16:55 am
-
Hello there, I am Trying to make bot friendly with Cyrillic encoding,
what do doing wrong?
1) putted php_iconv.dll to php.ini
2) changed bot.php with:
$msg=iconv($msg,"utf-8","cp1251");
But now, bot giving me empty messages.
Thanks
Using: Must die XP, php 5.1.5, Bebot 0.2.8
-
It's a bit hard for me to test cyrillic support offhand, although if you can provide an example string i can try and see if i can make some headway.
Remember the by default the bot decodes everything from UTF-8 into ISO-8859-1 using utf8_decode.
Be sure to look for all instances of utf8_decode and utf8_encode in Bot.php and replace them with iconv
-
I found another solution. don't need use iconv
adding to bot.php after <?
function utf2win1251 ($s)
{
$out = "";
for ($i=0; $i<strlen($s); $i++)
{
$c1 = substr ($s, $i, 1);
$byte1 = ord ($c1);
if ($byte1>>5 == 6) // 110x xxxx, 110 prefix for 2 bytes unicode
{
$i++;
$c2 = substr ($s, $i, 1);
$byte2 = ord ($c2);
$byte1 &= 31; // remove the 3 bit two bytes prefix
$byte2 &= 63; // remove the 2 bit trailing byte prefix
$byte2 |= (($byte1 & 3) << 6); // last 2 bits of c1 become first 2 of c2
$byte1 >>= 2; // c1 shifts 2 to the right
$word = ($byte1<<8) + $byte2;
if ($word==1025) $out .= chr(168); // ?
elseif ($word==1105) $out .= chr(184); // ?
elseif ($word>=0x0410 && $word<=0x044F) $out .= chr($word-848); // ?-? ?-?
else
{
$a = dechex($byte1);
$a = str_pad($a, 2, "0", STR_PAD_LEFT);
$b = dechex($byte2);
$b = str_pad($b, 2, "0", STR_PAD_LEFT);
$out .= "".$a.$b.";";
}
}
else
{
$out .= $c1;
}
}
return $out;
}
function cp1251_utf8( $sInput )
{
$sOutput = "";
for ( $i = 0; $i < strlen( $sInput ); $i++ )
{
$iAscii = ord( $sInput[$i] );
if ( $iAscii >= 192 && $iAscii <= 255 )
$sOutput .= "".( 1040 + ( $iAscii - 192 ) ).";";
else if ( $iAscii == 168 )
$sOutput .= "".( 1025 ).";";
else if ( $iAscii == 184 )
$sOutput .= "".( 1105 ).";";
else
$sOutput .= $sInput[$i];
}
return $sOutput;
}
After replacing "utf8_encode" to "cp1251_utf8"
and "utf8_decode" to "utf2win1251"
After this, bot can understand Cyrillic.
Info by NStorm RK1