Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Прочитать текстовый файл (https://javascript.ru/forum/misc/21204-prochitat-tekstovyjj-fajjl.html)

Sergey_New 01.09.2011 11:51

Прочитать текстовый файл
 
Как прочитать текстовый файл с произвольным расширением находящийся на сервере (narod.ru) не используя iframe? В последнем случае замучился с кодировкой.

kadabrik 01.09.2011 12:52

С помощью JS - никак

Sergey_New 01.09.2011 12:58

Именно с JS. Делал с помощью ява апплета, не понравилось - лишние сущности.

kadabrik 01.09.2011 13:03

Цитата:

Сообщение от kadabrik (Сообщение 124054)
С помощью JS - никак

..

Octane 01.09.2011 13:07

Если сайт и текстовый файл на одном домене, и файл отдается как text/html или text/plain, то загрузите файл с помощью XMLHttpRequest.

Sergey_New 01.09.2011 13:49

Сайт и текстовый файл на одном домене. С XMLHttpRequest никогда не сталкивался. Попробую пример с http://xmlhttprequest.ru/. Octane, спасибо за наводку.

Sergey_New 01.09.2011 14:30

Не понял, как указать кодировку windows-1251:

function opentxt() {
    var xmlhttp = getXmlHttp()
    xmlhttp.open('GET charset=windows-1251', 'translations.txt', true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
                alert(xmlhttp.responseText);
            }
        }
    };
    xmlhttp.send(null);
}

Подскажите, пжл.

Octane 01.09.2011 14:40

Может быть это http://xpoint.ru/know-how/JavaScript...dows1251IKO I поможет

Kolyaj 01.09.2011 14:45

Кодировка указывается со стороны сервера.

Sergey_New 01.09.2011 15:45

Цитата:

Сообщение от Kolyaj (Сообщение 124074)
Кодировка указывается со стороны сервера.

Как это сделать Js?

Kolyaj 01.09.2011 15:52

Никак, это кто-то на сервере должен делать.

Sergey_New 01.09.2011 16:04

А зачем тогда был совет?

Kolyaj 01.09.2011 17:16

Цитата:

Сообщение от Sergey_New
А зачем тогда был совет?

Давайте вы сами попробуете догадаться.

Sergey_New 01.09.2011 19:41

Есть overrideMimeType(mimeType), но не поддерживается ИЕ. Вот засада!

Sergey_New 02.09.2011 09:37

Цитата:

Сообщение от Kolyaj (Сообщение 124120)
Давайте вы сами попробуете догадаться.

На форуме, как бы, не загадки загадывают. Тем не менее - не догадался.
А по существу можете ответить?

Kolyaj 02.09.2011 09:54

Я ответил по существу.
Цитата:

Сообщение от Kolyaj
Кодировка указывается со стороны сервера.


Sergey_New 02.09.2011 11:06

Я просил совета,
Цитата:

Сообщение от Sergey_New (Сообщение 124091)
Как это сделать Js?

а не констатации факта.
Ответьте просто - изменить кодировку у клиента невозможно, или, если возможно, то как?

kadabrik 02.09.2011 11:15

На js можно сделать перекодировку строки в кодировку сайта используя методы encodeURIComponent и decodeURIComponent

Kolyaj 02.09.2011 11:54

Sergey_New,
вы идиот? Если кодировку нужно указывать на сервере, то разумеется на js её указать невозможно.

Цитата:

Сообщение от kadabrik
На js можно сделать перекодировку строки в кодировку сайта используя методы encodeURIComponent и decodeURIComponent

Нельзя, в js придут знаки вопроса.

Sergey_New 02.09.2011 12:46

Цитата:

Сообщение от Kolyaj (Сообщение 124273)
Sergey_New,
вы идиот?

Нутро проявилось...
Лучше жевать, чем говорить (ц)

kadabrik 02.09.2011 12:50

Цитата:

Сообщение от Kolyaj (Сообщение 124273)
Нельзя, в js придут знаки вопроса.

Точно помню, что именно таким способом перекодировал UTF-8 AJAX ответ в cp1251. Вот нашел где я это увидел:http://mabp.kiev.ua/2008/04/02/encod...in_javascript/

dmitriymar 02.09.2011 13:02

Цитата:

Сообщение от kadabrik
encodeURIComponent и decodeURIComponent

каким боком это? маны читай
Цитата:

Сообщение от kadabrik
http://mabp.kiev.ua/2008/04/02/encoding_decoding_utf_in_javascript/

прочитай там коменты под статьёй. Писавший её явно дуб.Не понимает разницу между кодировками и преобразованиями

kadabrik 02.09.2011 13:06

Цитата:

Сообщение от dmitriymar (Сообщение 124286)
каким боком это?

// UTF-8 encode / decode by Johan Sundstr?m
function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}


function decode_utf8( s )
{
  return decodeURIComponent( escape( s ) );
}


Ну работает правда только в одну сторону, так как это не совсем перекодировка а преобразование, там в коментах можно увидеть.

dmitriymar 02.09.2011 13:11

ещё раз -прочитай коменты под статьей. то что ты делаешь не переводит из кодировки в кодировку,а заменяет символы ,какие нельзя передавать прямо , соответствующими им кодами.
а перекодировка из тогоже 1251 в утф8 сводится к перекодировке на серверной стороне тем же iconv и в последующей замене "непередаваемых " символов их кодами
Ты разницу понимаешь между перекодировкой и преобразованием?

kadabrik 02.09.2011 13:19

Цитата:

Сообщение от dmitriymar (Сообщение 124291)
ещё раз -прочитай коменты под статьей. то что ты делаешь не переводит из кодировки в кодировку,а заменяет символы ,какие нельзя передавать прямо , соответствующими им кодами.
а перекодировка из тогоже 1251 в утф8 сводится к перекодировке на серверной стороне тем же iconv и в последующей замене "непередаваемых " символов их кодами

Я читал комменты, и прекрасно понимаю что делают эти функции. Да если капнуть глубже то можно увидить что это не перекодировка, я просто обозначил это таким образом для простоты, не надо придираться, однако нужный эффект они дают - текст который не отображается нормально в UTF-8 после такого преобразования отображается корректно.

dmitriymar 02.09.2011 13:21

Ещё раз :-/
какое это имеет отношение к перекодированию из утф8 в 1251 или любой другой пары кодировок?

Цитата:

Сообщение от kadabrik
Я читал комменты, и прекрасно понимаю что делают эти функции. Да если капнуть глубже то можно увидить что это не перекодировка, я просто обозначил это таким образом для простоты, не надо придираться, однако нужный эффект они дают - текст который не отображается нормально в UTF-8 после такого преобразования отображается корректно.

Да не понимаешь ты.....Эффект функции сводится к обратному преобразованию предварительно преобразованных данных .ключевые слова-предварительно преобразованных и обратному.Но это не имеет никакого отношения к изменению кодировки.Весь фокус в том чтоб предать с сервера данные в правильной кодировке чтоб их можно было открыть на сайте с указанной кодировкой.

popov654 03.09.2011 01:51

А что мешает реализовать на JS функцию, которая будет делать именно перекодировку?.. В самом деле, берём и перекодируем, надо только знать кодовую страницу и забить её в скрипт ручками

Kolyaj 03.09.2011 07:49

Цитата:

Сообщение от popov654
А что мешает реализовать на JS функцию, которая будет делать именно перекодировку?

В JavaScript уже приходит раскодированная строка, а не байты, раскодировкой занимается браузер. Если браузер не угадал кодировку, в JavaScript придут знаки вопроса.

Sergey_New 03.09.2011 12:52

Резюме:
чтение кириллицы из текстового файла на сервере в кодировке windows-1251 средсвами только Js браузером IE невозможно (исключение - iframe).
Так?

kadabrik 03.09.2011 15:20

Цитата:

Сообщение от dmitriymar (Сообщение 124295)
Ещё раз :-/
какое это имеет отношение к перекодированию из утф8 в 1251 или любой другой пары кодировок?
Да не понимаешь ты.....Эффект функции сводится к обратному преобразованию предварительно преобразованных данных .ключевые слова-предварительно преобразованных и обратному.Но это не имеет никакого отношения к изменению кодировки.Весь фокус в том чтоб предать с сервера данные в правильной кодировке чтоб их можно было открыть на сайте с указанной кодировкой.

Откопал проект где я это делал, действительно текст приходил не в чистом виде, т.к. php'шный json_encode его предварительно преобразовал. Каюсь:agree:


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