Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как декодировать строку из utf-8 в windows-1251 
:(
    Опции темы
korob2001
Дата 27.3.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Привет!
Почитал доки по XMLHttpRequest, написал такой код:
Код

var req = null;
var str = "";
var element = null;

function loadXMLDoc(url) {
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

function processReqChange() {   
    var state = stat(req.readyState); 
    ab = window.setTimeout("req.abort();", 5000);
    
    if (req.readyState == 4) {
        clearTimeout(ab);
 
        if (req.status == 200) {
            element.innerHTML = req.responseText;
        } else {
            element.innerHTML = "Default string: " + req.statusText;
        }
    }  
}

function stat(n)
{
  switch (n) {
    case 0:
      return "не инициализирован";
    break;
      
    case 1: 
      return "подргужаем...";
    break;
    
    case 2: 
      return "подгрузил";
    break;
    
    case 3: 
      return "в процессе...";
    break;
      
    case 4: 
      return "enjoy";
    break;
    
    default:
      return "fuck";  
  }  
}

function getNextString(url, oldString) {
    url += "?old=";
    url += oldString;
    loadXMLDoc(url); 
}

function go(id, old) {
    element = document.getElementById(id);
    getNextString('http://localhost/cgi-bin/runtext/getnext.pl', old);
}

Сохранил его в файл: MixedString.js . Функция go() получает id элемента и номер последнего сообщения.
Затем написал такой HTML:
Код

<html>
    <head>
        <title>Test</title>
        <script language="JavaScript" type="text/javascript" src="MixedString.js"></script>
    </head>
    <body>
        <div style="width: 100%; border-width: 1px; border-color: #000000" id="inf1" onmouseover="go('inf1',0)">&nbsp;</div><br/>
        <div style="width: 100%; border-width: 1px; border-color: #000000" id="inf2" onmouseover="go('inf2',1)">&nbsp;</div><br/>
        <div style="width: 100%; border-width: 1px; border-color: #000000" id="inf3" onmouseover="go('inf3',2)">&nbsp;</div><br/>
        <div style="width: 100%; border-width: 1px; border-color: #000000" id="inf4" onmouseover="go('inf4',3)">&nbsp;</div><br/>
        <div style="width: 100%; border-width: 1px; border-color: #000000" id="inf5" onmouseover="go('inf5',4)">&nbsp;</div><br/>
        <div style="width: 100%; border-width: 1px; border-color: #000000" id="inf6" onmouseover="go('inf6',5)">&nbsp;</div><br/>
    </body>
</html>

Когда курсор над div'ом, он получает c помощью XMLHttpRequest следующую строку из программы Perl. Программа на Perl возвращает её и выглядит так:
Код

#!/usr/bin/perl -w
use strict;
use CGI;

my $file = "messages.txt";

my $num = CGI->new()->param('old');

my $message = "";

if (-e $file) {
     open(MESS, "< $file") or die "Can't open file '$file': $!\n";
          chomp( my @messages = <MESS> );
     close(MESS);
     $num = ( $num >= @messages ) ? 0 : ++$num;
     $message = $messages[$num];
}

print qq[Content-type: text/plain\n\n];
print qq[$messageµ$num];

Она возвращает следующую строку из файла "messages.txt". Файл "messages.txt" выглядит так:
Код

Это первое сообщение.
А это второе, тестовое соощение.
А это третье, тестовое соощение.
А это четвёртое, тестовое соощение.
А это пятое, тестовое соощение.

Всё вродебы работает, но судя по всему req.responseText возвращает строку в кодировке utf-8, так как в браузере я получаю строку такого вида: ?????? ???????? ??????? ?? ???????2 ;(((((
Подскажите, как декодировать её в кодировку windows-1251?

Это сообщение отредактировал(а) korob2001 - 27.3.2006, 16:43


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Ciber SLasH
Дата 27.3.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 24
Всего: 67



korob2001, добавь в заголовок Content-Type ещё и charset=windows-1251 (короче нужный чарсет).
PM   Вверх
korob2001
Дата 27.3.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Ciber SLasH - спасибо, грабли действительно были в заголовке. Немного подправил код Perl и всё заработало, а именно:
Код

#!/usr/bin/perl -w
use strict;
use CGI;

my $file = "messages.txt";

my $cgi = CGI->new();
my $num = $cgi->param('old');

my $message = "";

if (-e $file) {
     open(MESS, "< $file") or die "Can't open file '$file': $!\n";
          chomp( my @messages = <MESS> );
     close(MESS);
     $num = ( $num >= @messages ) ? 0 : ++$num;
     $message = $messages[$num];
}

print $cgi->header( -charset => "windows-1251",
                    -type    => "text/plain" );
print qq[$messageµ$num];

;))))))))

Это сообщение отредактировал(а) korob2001 - 27.3.2006, 16:43


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.