Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   А всётаки возможно )) (https://javascript.ru/forum/dom-window/21703-vsjotaki-vozmozhno.html)

DjDiablo 20.09.2011 20:15

А всётаки возможно ))
 
Тут разгорелась небольшая дискуссия относительно возможности преобразования кодировки на стороне клиента.

Передача текста в SimpleText действительно провальная затея.
поэтому пришлось передавать данные как есть, в двоичном виде.

Передача в двоичном виде как нестранно проблемой не оказалась.

Первый способ, в Html5 XMLHttpRequest 2 знает что такое блобы.
второй способ) В инете я без труда нарыл хак, для текущей версии XMLHttpRequest

я выбрал второй способ. Получил строку байтов. И перебрал её в цикле преобразовав каждый байт в символ нужной мне кодировки. При этом никаких php скриптов непонадобилось

Вот скрипт
<html>
  <HEAD>
      <script src="jquery/jquery-1.6.1.min.js" type="text/javascript" charset="utf-8"></script>
  </HEAD>
<body>
<div id="test">

</div>

<script>
function decode (code) {
         if (code>127){ 
         	return String.fromCharCode(code + 848);
         } else return String.fromCharCode(code);
}


var text="";
var xhr = new XMLHttpRequest();
//xhr.open('GET', 'http://tester.ru/hello.txt', true);

xhr.open('GET', 'hello.txt', true);

// ХОТИМ БАЙТЫ В НЕИЗМЕННОМ ВИДЕ
xhr.overrideMimeType('text/plain; charset=x-user-defined');

xhr.onreadystatechange = function(e) {  

  if (this.readyState == 4 && this.status == 200) {

    var binStr = this.responseText;

    for (var i = 0, len = binStr.length; i < len; ++i) {
      var c = binStr.charCodeAt(i);
      //String.fromCharCode(c & 0xff);
      var byte = c & 0xff;
      text+=decode(byte);
    }

      $('body').html('<h1>'+text+'</h1>');
  }
};

xhr.send();

</script>
</body>
</html>


рабочий пример.
здесь :http://depositfiles.com/files/pkv4dwmqx
или здесь:http://javascript.ru/forum/attachmen...1&d=1316535516[/url]

Запускать пример естественно на сервере. Лично я проверял под apache.

dmitriymar 20.09.2011 21:13

объясни зачем это нужно? никто ведь не говорил что если передавать не текст а коды символов то работать не будет. а так вместо простого iconv сначала в код ,а затем на клиенте его преобразовывать. зачем это?
речь вед шла о том ,что если нет доступа к серверному языку то невозможно. а так я не знаю что ты доказал...
наверное то что никто не оспаривал:haha:
оно стоило потраченного времени? да и ничего ты толком не сделал-невозможно изменить кодировку без серверной части!!
а так ты молодец-сотни строк кода ,загрузил и сервер и браузер неподетски вместо одного оператора iconv или ему подобных. совет один- учи мат часть и рассуждай трезво.
а то что ты сделал называется-ГОВНОКОД

DjDiablo 20.09.2011 21:22

Понятия неимею для чего это нужно. Для просмотрщика текстовых файлов на ucoz наверное )))))


не ты ли это писал ?)
Цитата:

Цитата:

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

Цитата:

На одной две кодировки не могут согласен. Но изменить коды символов в строке так чтобы они показывали правильные буковки наверняка можно.
Цитата:

на клиенте не выйдет


Ну и какой из этого я должен был сделать вывод ?

Да и не в тебе дело, мне задача понравилась, а предложений от тех кто знает как решить не поступало. Покавырялся, сделал, получил удовольствие.

Охотно верю что ты знал как это сделать, как и многие здесь.

dmitriymar 20.09.2011 21:32

1 код какой ты взял за основу-признан говнокодом в момент его появленя и в комментах создатель этото подхода был обласкан
2 не выкидывай из контекста-контекст был что изменения делаются на серверной стороне,или у тебя сервер не участвует в этом?:D
3 изобретение велосепеда вместо обычных действий по приведению кодировки
4 ты скриптом не меняешь кодировку текста ты приводишь коды
ну и где у тебя связь с задачей?
продолжить?
всё также и осталось без использования сервера-НЕВОЗМОЖНО ИЗМЕНИТЬ КОДИРОВКУ!!!
я не имею ничего лично против тебя,но кода начинал изучать язык -налетал на много таких шедевров от жаждящих прославится и мнение о языке у меня после них падало и в такую. ..ню заводило

DjDiablo 20.09.2011 22:00

времени я потратил всего 20 минут. Накидал и забыл, но благодаря тебе, ещё час ушёл на переписку))

1) Да говнокод конечно, я и неутверждаю что это всё имеет практическую ценность и неутверждаю что оформлено красиво, не до этого. Однако он всё таки работает. Предложи что нибудь на js лучше, а я буду мотать на ус.

Я конечно мог оформить посимпотичнее, я просто забил на это ). Не стоит принимать это так близко к сердцу.

2) Главное что в серверной части непришлось писать серверный скрипт.

3) тут согласен. Велосипед зло!

4) Ну да я привожу коды и что c того ? содержимое из файла с cp1251 вставляется в html utf8, или надо что-то ещё ?)))

Как вариант возможны реализации через arrayBuffer или blob, но смысл будет тот-же, передача сырых двоичных данных. Если кто подскажет как это сделать текстом, низкий ему поклон.


В любом случае надеюсь никогда с этой задачей не столкнусь на практике )

Sergey_New 20.09.2011 22:40

Этот вариант уже рассматривался. Не применим в ИЕ.

DjDiablo 20.09.2011 22:44

Даже так. На ie не тестил. Но если браузеры это критично (а обычно так и есть :) ), тогда надо думать дальше.

только не говори что тебе 6й ie нужен ))

Ну совсем жёсткий вариант, если сделать обёртку на flash какую нибудь попробывать.

Sergey_New 20.09.2011 22:46

Не совсем :)
Решил с помощью апплета.

DjDiablo 20.09.2011 22:58

Цитата:

Сообщение от Sergey_New (Сообщение 127434)
Не совсем :)
Решил с помощью апплета.

ну или так :)

x-yuri 25.09.2011 19:31

Цитата:

Сообщение от DjDiablo
Да и не в тебе дело, мне задача понравилась, а предложений от тех кто знает как решить не поступало. Покавырялся, сделал, получил удовольствие.

по-моему достойная причина :) Желания прославиться не заметил. Возможно даже идея где-нибудь сможет пригодиться


Часовой пояс GMT +3, время: 09:49.