Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Изменение кодировки текста (http://www.flasher.ru/forum/showthread.php?t=107453)

etc 30.05.2008 23:38

Цитата:

Сообщение от ulik (Сообщение 742815)
Пожалуйста:

Собственно, результат, честно сохраненный в кодировке windows-1251 c LF+CR переводами строк файл 1.html и кодом без изменений:

[img]http://img65.**************/img65/6852/encodingmc2.png[/img]

Тот же вариант, но с параметром «windows-1251» во втором аргументе:

[img]http://img230.**************/img230/6440/encoding2ev3.png[/img]

Результаты под Windows идентичны, могу привести скриншоты.
У тебя, наверное, уникальная версия флеша, с неправильно работающим ByteArray.

BlooDHounD 31.05.2008 14:48

ulik, боюсь Вас разочаровывать, но в моём постулате про секурность сказано, что я могу загрузить, но не могу изменять.

broucker 24.06.2009 12:41

Спасибо большое. Долго искал решение данной проблемы. Кстати, получил корректные результаты только после того, как во втором аргументе прописал «windows-1251».

AL.exe 24.06.2009 21:44

Цитата:

Аналогия с Security - в мануале сказано, что нельзя грузить данные с другого домена, без crossdomain. Но на практике - это не так. Все отлично грузится (jpg,png,gif...)
Хм, а где в мануале написано, как можно это сделать?

Mur4ik 25.06.2009 13:16

to AL.exe:
Просто добавить Loader в дисплейлист. Или переместить Loader в нужный Вам контейнер.

Загружать можно и без кроссдомена, а вот изменять (срисовывать в BitmapData) не выйдет.

catyoshi 25.06.2009 14:06

Если вы не можете поменять кодировку отдаваемых данных на стороне сервера, то перевидите нижеслующий код с 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 ).

Klimtsov 01.07.2009 13:19

Можно ещё попробовать поиграть
Код:

System.useCodepage = false;
System.useCodepage = true;

Перед получением отключаем Юникод.
После - обратно включаем.

Может и не совсем корректно, но всё работает.:confused:

etc 01.07.2009 13:56

Цитата:

Сообщение от Klimtsov (Сообщение 832326)
всё работает.:confused:

Под виндой с cp1251 по умолчанию, ага.


Часовой пояс GMT +4, время: 00:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.