ФорумПрограммированиеJavaScript → Как выводить русские буквы из внешнего файла в странице win-1251

Как выводить русские буквы из внешнего файла в странице win-1251

  • slavikf

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2010 г. 2:53

    Помогите…
    Читаю (AJAX) из своего скрипта внешний файл (русский текст, ANSI) и вставляю этот текст в свои контролы. Вместо русского - кракозябры. Ткните, чё я пропустил. Всё проверялось на FireFox 4.0 и Opera 10

    вот так получаются кракозябры:

    <html>
    <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=windows-1251" >
    </head>

    <BODY>
    <select name="BookBox" id="BookBox"></select>
    <script type="text/javascript">
    var client1 = new XMLHttpRequest();
    client1.open('GET', 'rus.txt');
    client1.onreadystatechange = function() {
    if (client1.readyState==4) {
    BooksList = client1.responseText.split("\n");
    for(i=0; i<BooksList.length; i++)
    document.getElementById('BookBox').options=new Option(BooksList,i, false, false);
    }
    }
    client1.send();
    </script>
    </BODY>
    </HTML>


    Если не обращаться к внешнему файлу, то всё работает:
    <html>
    <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=windows-1251" >
    </head>

    <BODY>
    <select name="BookBox" id="BookBox"></select>
    <script type="text/javascript">
    document.getElementById('BookBox').options[1]=new Option('русский текст',1, false, false);
    </script>
    </BODY>
    </HTML>


    Если использовать UTF-8, то тоже всё работает, но UTF для данного проекта использовать не могу.
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 19 декабря 2010 г. 3:01, спустя 8 минут 21 секунду

  • Frozzeg

    Сообщения: 5641 Репутация: N Группа: Джедаи

    Spritz 19 декабря 2010 г. 3:01, спустя 13 секунд

    но UTF для данного проекта использовать не могу.

    как так?
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 19 декабря 2010 г. 3:05, спустя 3 минуты 28 секунд

    Frozzeg, видимо челу впадлу переписывать все на UTF )
  • master

    Сообщения: 3237 Репутация: N Группа: Джедаи

    Spritz 19 декабря 2010 г. 3:15, спустя 10 минут 3 секунды

    какая кодировка в хедерах?
    не всё полезно, что в swap полезло
  • slavikf

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2010 г. 3:40, спустя 25 минут 8 секунд

    Спасибо, Марио - стать зачётная.
    Из того, что там написано я понял, что браузер действует по умолчанию в UTF8, если только сервер в хедере не указывает другую кодировку.
    А я этого сделать не могу… Потому что файлов много, они текстовые (даже не html), и там никакой кодировки не прописано. А глобально сервера настройки поменять не могу. Да и надо, чтоб этот JavaScript работал на локальном диске, где вообще сервера нет (file://…..index.html)

    С другой стороны, ответ с сервера браузер воспринимает именно в той кодировке, которая указана в заголовке ответа Content-Type.


    Получается - облом… :-)
    Единственная надежда - может у XMLHttpRequest есть какое-нибудь property, где это можно как-то прописать?
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 19 декабря 2010 г. 3:46, спустя 5 минут 34 секунды

    Единственная надежда - может у XMLHttpRequest есть какое-нибудь property, где это можно как-то прописать?

    его нет.

    попробуйте в браузере поменять кодировку по умолчанию (для FF Настройки -> Содержимое -> Дополнительно -> Кодировка по умолчнаию)
    Спустя 34 сек.
    А глобально сервера настройки поменять не могу.

    почему? Какой сервер?
  • slavikf

    Сообщения: 3 Репутация: N Группа: Кто попало

    Spritz 19 декабря 2010 г. 5:16, спустя 1 час 30 минут 3 секунды

    Разобрался!

    Нужен метод:
    overrideMimeType("text/plain; CHARSET=windows-1251");


    И всё работает:
    	<script type="text/javascript">
    var client1 = new XMLHttpRequest();
    client1.open('GET', 'rus.txt');
    client1.overrideMimeType("text/plain; CHARSET=windows-1251");
    client1.onreadystatechange = function() {
    if (client1.readyState==4) {
    BooksList = client1.responseText.split("\n");
    for(i=0; i<BooksList.length; i++)
    document.getElementById('BookBox').options=new Option(BooksList,i, false, false);
    }
    }
    client1.send();
    </script>


    Взято отсюда:
    http://forum.antichat.ru/printthread.php?t=32325 2й топик там….
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 20 декабря 2010 г. 2:49, спустя 21 час 32 минуты 50 секунд

    Для таких случаев пользуюсь следующей функцией
    function cp1251_to_utf8 ($txt)  {
    $in_arr = array (
    chr(208), chr(192), chr(193), chr(194),
    chr(195), chr(196), chr(197), chr(168),
    chr(198), chr(199), chr(200), chr(201),
    chr(202), chr(203), chr(204), chr(205),
    chr(206), chr(207), chr(209), chr(210),
    chr(211), chr(212), chr(213), chr(214),
    chr(215), chr(216), chr(217), chr(218),
    chr(219), chr(220), chr(221), chr(222),
    chr(223), chr(224), chr(225), chr(226),
    chr(227), chr(228), chr(229), chr(184),
    chr(230), chr(231), chr(232), chr(233),
    chr(234), chr(235), chr(236), chr(237),
    chr(238), chr(239), chr(240), chr(241),
    chr(242), chr(243), chr(244), chr(245),
    chr(246), chr(247), chr(248), chr(249),
    chr(250), chr(251), chr(252), chr(253),
    chr(254), chr(255)
    );

    $out_arr = array (
    chr(208).chr(160), chr(208).chr(144), chr(208).chr(145),
    chr(208).chr(146), chr(208).chr(147), chr(208).chr(148),
    chr(208).chr(149), chr(208).chr(129), chr(208).chr(150),
    chr(208).chr(151), chr(208).chr(152), chr(208).chr(153),
    chr(208).chr(154), chr(208).chr(155), chr(208).chr(156),
    chr(208).chr(157), chr(208).chr(158), chr(208).chr(159),
    chr(208).chr(161), chr(208).chr(162), chr(208).chr(163),
    chr(208).chr(164), chr(208).chr(165), chr(208).chr(166),
    chr(208).chr(167), chr(208).chr(168), chr(208).chr(169),
    chr(208).chr(170), chr(208).chr(171), chr(208).chr(172),
    chr(208).chr(173), chr(208).chr(174), chr(208).chr(175),
    chr(208).chr(176), chr(208).chr(177), chr(208).chr(178),
    chr(208).chr(179), chr(208).chr(180), chr(208).chr(181),
    chr(209).chr(145), chr(208).chr(182), chr(208).chr(183),
    chr(208).chr(184), chr(208).chr(185), chr(208).chr(186),
    chr(208).chr(187), chr(208).chr(188), chr(208).chr(189),
    chr(208).chr(190), chr(208).chr(191), chr(209).chr(128),
    chr(209).chr(129), chr(209).chr(130), chr(209).chr(131),
    chr(209).chr(132), chr(209).chr(133), chr(209).chr(134),
    chr(209).chr(135), chr(209).chr(136), chr(209).chr(137),
    chr(209).chr(138), chr(209).chr(139), chr(209).chr(140),
    chr(209).chr(141), chr(209).chr(142), chr(209).chr(143)
    );

    $txt = str_replace($in_arr,$out_arr,$txt);
    return $txt;
    }
    from TRIAL with LOVE
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 20 декабря 2010 г. 2:54, спустя 5 минут 43 секунды

    чо за гений ее интересно написал вообще :D
    Спустя 57 сек.
    chr(208).chr(160)
    = "\D0\A0" если не ошибаюсь насчет \ для ввода в кодах
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!