Показать сообщение отдельно
Старый 25.06.2009, 14:06
catyoshi вне форума Посмотреть профиль Отправить личное сообщение для catyoshi Найти все сообщения от catyoshi
  № 26  
Ответить с цитированием
catyoshi

Регистрация: Feb 2006
Сообщений: 56
Отправить сообщение для catyoshi с помощью ICQ
Если вы не можете поменять кодировку отдаваемых данных на стороне сервера, то перевидите нижеслующий код с PHP на AS, только учтите что вам нужно из cp1251 перевести в utf-8, а прилагаемый ниже пример кода делает наоборот (из utf-8 переводит в cp1251). Но немного усидчивости и вы смолжете подправить его в обратную сторону

Код:
setlocale( LC_CTYPE, 'ru_RU.CP1251', 'windows-1251', 'russian' );

// функция преобразования utf8 в win-1251
function utf2win1251( $text ) {

   $out = '';

   for ( $i = 0; $i < strlen( $text ); $i++ ) {
      $c1    = substr ( $text, $i, 1 );
      $byte1 = ord ( $c1 );

      if ( $byte1 >> 5 == 6 ) { // 110x xxxx, 110 префикс для двухбайтового unicode

         $i++;
         $c2      = substr ( $text, $i, 1 );
         $byte2   = ord ( $c2 );
         $byte1  &= 31;                    // удаление 3 бит двухбайтового префикса
         $byte2  &= 63;                    // удаление 2 бит у двухбайтового префикса (замыкающие)
         $byte2  |= ( ($byte1 & 3) << 6 ); // последние 2 бита символа 'c1' становятся двумя первыми символа 'c2'
         $byte1 >>= 2;                     // 'c1' сдвигаем вправо на 2 бита

         $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 );
            $b = dechex( $byte2 );

            $a = str_pad( $a, 2, '0', STR_PAD_LEFT );
            $b = str_pad( $b, 2, "0", STR_PAD_LEFT );

            $out .= '&#x' . $a.$b . ';';
         }
      }

      else {
         $out .= $c1;
      }
   }

   return $out;
}
но лучше все сделать на стороне сервера
если там у вас используется PHP или С, то воспользуйтесь библиотекой iconv, если же у вас там Perl, то на CPAN'е можно найти с десяток библиотек по перекидыванию текста из одной кодировки в другую ( Unicode::Map8, utf8, Convert::Cyrillic, etc ).


Последний раз редактировалось catyoshi; 25.06.2009 в 14:15.