Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Закладки » Проблема с кодировкой в странице, сгенереной JavaScript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

penguinus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Простой пример, иллюстрирующий проблему

Код:
 
<script language="JavaScript">
var newWindow = window.open('', '', 'width=100,height=100,toolbar=0' );
newWindow.document.open();
newWindow.document.write("Привет");
newWindow.document.close();
</script>
 

 
Скрипт открывает попап и в него пишет документ (в примере "документ" сильно сокращён ).
А проблема состоит в том, что документ, который изначально находится в кодировке CP1251, в попапе оказывается преобразованным в UTF-8.  
Как с этим бороться? Как запретить JavaScript конвертировать исходный документ?

Всего записей: 301 | Зарегистр. 20-12-2001 | Отправлено: 03:52 14-06-2003 | Исправлено: penguinus, 03:53 14-06-2003
KVCH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
penguinus
 
а он не конвертит... имхо, просто твой браузер автоматом ставит другую кодиру... ты нажми в том окошке правой кнопой, и попробуй поглядеть на кодиры которые он предлагает, там должно быть стоять юникод по дефолту и при етом ещё не активным быть... попробуй в выводимый текст начепятать мету с 1251...  
 

Код:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

 
я у себя траблу решил путём прописывания в апачик дефолтной кодиры 1251...

----------
FreeBSD лучше Linux !

Всего записей: 1741 | Зарегистр. 03-03-2002 | Отправлено: 04:06 14-06-2003
penguinus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Смотрел. И исходный код этой страницы открывал. Натуральный UTF-8. В этом сомнений нет.
мета не поможет. Пробовал и это, и ещё писать для открытия  
newWindow.document.open("text/html; charset=windows-1251");  

Цитата:
я у себя траблу решил путём прописывания в апачик дефолтной кодиры 1251...

Ты не понял. Апач тут не поможет. Эта страница генерится на стороне клиента средствами JavaScript, так что заголовкам тут неоткуда взяться.

Всего записей: 301 | Зарегистр. 20-12-2001 | Отправлено: 04:22 14-06-2003
KVCH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
penguinus
из чего генерится ?
 
покажи кодик...
 
дык если утф 8, поставь мету с утф-8

----------
FreeBSD лучше Linux !

Всего записей: 1741 | Зарегистр. 03-03-2002 | Отправлено: 04:36 14-06-2003
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
penguinus

Цитата:
Пробовал и это, и ещё писать для открытия  
newWindow.document.open("text/html; charset=windows-1251");  

document.open() просто игнорирует любые передаваемые параметры...
так делай:

Код:
 
<script>  
var newWindow = window.open('', '', 'width=100,height=100,toolbar=0');  
newWindow.document.open();  
newWindow.document.write('<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">\nПривет');  
newWindow.document.close();  
</script>  
 

должно везде работать.
 
В каком браузере глюки появляются?
 
Добавлено
penguinus
ну да...

Цитата:
KVCH: из чего генерится ?  
покажи кодик...  
дык если утф 8, поставь мету с утф-8

если кодировка исходной страницы (и текст для генерируемой страницы, само собой) не windows-1251, то в любом случае всё перекодируется в непонятно что

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 08:34 14-06-2003
penguinus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
 
newWindow.document.write('<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">\nПривет');
 

Не помогает. Текст то всё равно конвертит в UTF
 

Код:
 
дык если утф 8, поставь мету с утф-8  
 

Дело в том, что на самой странице всё выводится без проблем даже без меты. Юникод определяется любым браузером корректно. Но дело в том, что у меня там генерится форма, которую должен заполнить юзер. Поскольку страницы в UTF, то браузер и ввод пользователя кодирует в UTF. А при отправке возникают проблемы: IE отправляет UTF как есть. В обрабатывающем скрипте я получаю попао
Мозилла кодирует содержимое. Я получаю коды символов &#1086;&#1072;&#1088;&#1086;&#1074;
Опера отправляет вообще некорректно. Получаю ????????? ?????????.  
 
Хмм. То есть варианта отключить перекодировку в JavaScript нету?

Всего записей: 301 | Зарегистр. 20-12-2001 | Отправлено: 12:11 14-06-2003
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
penguinus
 

Цитата:
 Поскольку страницы в UTF, то браузер и ввод пользователя кодирует в UTF

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

Цитата:
 IE отправляет UTF как есть. В обрабатывающем скрипте я получаю попао  
Мозилла кодирует содержимое. Я получаю коды символов &#1086;&#1072;&#1088;&#1086;&#1074;  
Опера отправляет вообще некорректно. Получаю ????????? ?????????.  

странно...
вообщем, давай код самой страницы.

Цитата:
 То есть варианта отключить перекодировку в JavaScript нету?

JavaScript не знает, что такое кодировка...
Он вообще до версии, по-моему, 1.3 при наличии в скрипте неанглийских символов ошибку выдавал и не отрабатывал.
 
Кстати, а к чему, если такие проблемы, генерить содержимое всплывающего окна скриптом?
Просто сделай отдельный файл с кодом, который у тебя генерится, но в нормальной кодировке... его и открывай через window.open().

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 12:41 14-06-2003
penguinus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga

Цитата:
т.е. страница, с которой генерится окно с формой сама в UTF-8?  

Да в том то и прикол, что эта страница в CP1251, и русские символы на ней в этой кодировке, а вот на сгенеренной странице они уже в UTF.

Цитата:
JavaScript не знает, что такое кодировка...  

Практика показывает, что знает. Более того, изменяет её, не спрашивая разрешения.

Цитата:
Кстати, а к чему, если такие проблемы, генерить содержимое всплывающего окна скриптом?  

Так скрипт этот не мной написан. Я вот пытаюсь теперь исправить то, что имею.
Генерится это всё с целью не обращаться на сервер лишний раз. Сей скрипт есть корзина покупок в магазине. Висит эта штука в отдельном фрейме и всё там на JavaScript: и добавление, и вывод содержимого. Дык вот с выводом и проблема.  
 

Цитата:
Просто сделай отдельный файл с кодом, который у тебя генерится, но в нормальной кодировке... его и открывай через window.open()

Да, видимо к этому всё и идёт. Я просто надеялся, что можно как-то перекодировку запретить.

Всего записей: 301 | Зарегистр. 20-12-2001 | Отправлено: 13:08 14-06-2003
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
penguinus

Цитата:
Да в том то и прикол, что эта страница в CP1251, и русские символы на ней в этой кодировке, а вот на сгенеренной странице они уже в UTF.  

давай сам код страницы, не должно такого быть-- посмотрим


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 13:32 14-06-2003
penguinus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ok. Та страница слишком здоровая. Вот пример поменьше. Абсолютно тот же эффект.

Код:
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<script language="JavaScript">
var cartWindow = window.open('', '', 'width=400,height=400,toolbar=0' );
cartWindow.document.open();
cartWindow.document.write("<html><body><meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\"><form action=\"http://localhost/test/gettext.php\"> Русский текст:<input type=\"text\" name=\"rustext\" value=\"\" /><input type=\"submit\" /></form></body></html>");
cartWindow.document.close();
</script>
</body>
</html>
 

 
gettext.php

Код:
 
<?php
echo($_GET['rustext']);
?>
 

 
В форму вводим слово "Привет"
В итоге в случае IE получаем Привет
в случае Мозилла получаем Привет (в коде страницы это выглядит как &#1055;&#1088;&#1080;&#1074;&#1077;&#1090;)
в случае Оперы получаем ??????

Всего записей: 301 | Зарегистр. 20-12-2001 | Отправлено: 17:54 14-06-2003
PaulGor



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
penguinus,
В ИЕ была недокументированная фича, но после того, как года 2 назад
я по похожему поводу (такая же проблема, но с японским) бомбардировал  
news://msnews.microsoft.com/microsoft.public.scripting.jscript и мне ответил
начальник отдела JScript они это внесли в документацию - ты проглядел:
после  
 newWindow.document.close();  
надо вставить
newWindow.document.charset="windows-1251";
 
(у нас там правда справа - переменная, мы кодировку заранее в глобальной переменной храним).
 
Одновременно я бомбардировал comp.lang.javascript и Netscape JavaScript Newsgroup, т.к. у нас и в Netscape та же самая проблема была.
Оказалось, что Netscape ту же проблему решил по-другому -
нет у них document.charset=
a есть - 'кодировка по умолчанию' - Default Encoding, и вот если выбрать
1251 в качестве таковой, то всё работает...
 
 
 
 


----------
Хобби: кириллица вне России/СНГ на компьютерах и в Интернете

Всего записей: 631 | Зарегистр. 05-04-2002 | Отправлено: 21:06 14-06-2003
penguinus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PaulGor
Спасибо большое. Сам бы в жизни не нашёл. С IE всё получается просто отлично. Нельзя ли поточнее, как выставить кодировку по умолчанию в Netscape ?
 
Добавлено
Упс, только допёр. Это надо руцями в настройках выставлять. Это не есть гут конечно...
 
Добавлено
Хмм. И Опера опять выходит в пролёте (( А там ведь наихудший вариант: текст хе#ится безвозвратно. Кодировка по умолчанию там не прокатывает... Мда-с...

Всего записей: 301 | Зарегистр. 20-12-2001 | Отправлено: 01:04 15-06-2003
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
penguinus
Две причины глюков с кодировкой:
1).
Цитата:
<html><body><meta...  

meta ставится в head, а внутри body просто игнорируется
 
2). вместо
Цитата:
<?php  
echo($_GET['rustext']);  
?>  

попробуй

Код:
<?php  
echo('<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'.$_GET['rustext']);  
?>  

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



А вообще вместо генерации содержимого нового окна, лучше просто подгружай его из отдельного файла:
index.html:

Код:
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">  
</head>  
<body>  
<script>  
window.open('pop.html', '', 'width=400,height=400,toolbar=0')
</script>  
</body>  
</html>  

 
pop.html:

Код:
<html><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><body><form action="gettext.php"> Русский текст:<input type="text" name="rustext" value=""><input type="submit" /></form></body></html>

 
gettext.php:

Код:
<?php  
echo('<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'.$_GET['rustext']);  
?>  



 
PaulGor

Цитата:
newWindow.document.charset="windows-1251";  


Цитата:
document.charset=  
a есть - 'кодировка по умолчанию' - Default Encoding, и вот если выбрать  
1251 в качестве таковой, то всё работает...  

отстал я от жизни-- про кодировки не встречал ничего
Вообщем, покопал-посмотрел...
нашёл только следующее:
 
document.charset и document.defaultCharset только-- MSIE 4+
document.characterSet-- NN6+
linkOblect.charset-- NN6+
document.formObject.encoding -- везде, но не то
 
Вопросик: что ты именно делал для Нетскейпов, или речь шла о 6+?

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 16:29 15-06-2003
penguinus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga

Цитата:
 meta ставится в head, а внутри body просто игнорируется  

Никакие манипуляции с метой не помогут. JavaScript в любом случае перегоняет русскую и другие национальные кодировки в Юникод.
Вот только совет PaulGor помог. Надо именно указать JavaScript, что кодировка должна быть именно такой и никак не иначе.
 

Цитата:
 что ты именно делал для Нетскейпов

Да я вот тоже допёр не сразу. Он говорит не о каком-либо свойстве объекта document, а о банальной пользовательской настройке в NN (проверил на Mozilla 1.3)
Настройки => Навигатор => Языки  
Там есть настройка "Кодировка по умолчанию". Вот как она установлена, так и выдаётся страница. У меня стояла изначально ISO-8859-1 и мне выдавало в виде кодов. Потом поставил windows-1251 и стало выдавать как надо. Вот так.  
 

Цитата:
document.characterSet-- NN6+  
Хмм. Я пробовал его писать как и charset - Мозилла не реагирует. Может как-то иначе надо?
 

Всего записей: 301 | Зарегистр. 20-12-2001 | Отправлено: 18:51 15-06-2003
PaulGor



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga
penguinus,
 
Когда мы это делали (было несколько лет назад) не было Netscape 6, нам
было приказано поддерживать Netscape 4.77.
 
Но не думаю, что они подход изменили - да, только через меню браузера надо установить Default Character Set (это в 4.x) или Default Character Coding (это в Netscape 6/7/Mozilla).
 
Да, это не очень-то гибко
 

Всего записей: 631 | Зарегистр. 05-04-2002 | Отправлено: 22:20 15-06-2003
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
penguinus

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

не поверишь-- не наблюдал такого в MSIE 5.0, 5.5, 6.0, NN 4.0, 7.0, Opera 6.0, 7.0...
во всех вырублено автоопределение... так что это "наверно какие-то неправильные пчёлы" © Винни-Пух

Цитата:
 Я пробовал его писать как и charset - Мозилла не реагирует.  Может как-то иначе надо?  

не знаю, это я нашёл перекапывая JavaScript Bible Дэнни Гудмана-- так не проверял.
Написано об этом буквально следующее

Цитата:
document.characterSet
Value:String Read/Write
Compatibility NN6
 
The characterSet property reveals the character set used by the browser to render the current document (the IE4+version of this property is called charset ). You can find possible values for this property at ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets
Each browser and operating system has its own default character set. Values may also be set via a <META>tag.
 
Related Items:charset property.
 

а про charset такое:

Цитата:
document.charset
Value:String Read/Write
Compatibility IE4 IE5 IE5.5
 
The charset property reveals the character set used by the browser to render the current document (the NN6 version of this property is called characterSet ).You can find possible values for this property at ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets
Each browser and operating system has its own default character set.Values may also be set via a <META>tag.
 
Related Items:characterSet ,defaultCharset properties.
 

 
A в отдельном окне пытался делать, как я выше писал?

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 00:27 16-06-2003
PaulGor



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga

Цитата:
penguinus
 
Цитата:Никакие манипуляции с метой не помогут. JavaScript в любом случае перегоняет русскую и другие национальные кодировки в Юникод.  
 
не поверишь-- не наблюдал такого в MSIE 5.0, 5.5, 6.0, NN 4.0, 7.0, Opera 6.0, 7.0...  
во всех вырублено автоопределение... так что это "наверно какие-то неправильные пчёлы" © Винни-

 
Автоопределение здесь вроде не при чём...
Да, начиная с версии 1.3 вроде JavaScript работает как Java  - 'внутри' всё только в
Unicode, так что должно перегоняться.
 
А почему никто не видел таких проблем (из нашего опыта):
 - если есть обычная страница, помеченная "windows-1251", пусть даже и с JavaScript, но без спец. ситуации описанной ниже, то всё работает безо всяких  
document.charset= в ИЕ и без установки Default в Netscape - достаточно, что кодировка страницы известна
 - только в спец. случаях это не так:
    a) у нас было это, когда через JavaScript имитировалась отсылка данных из формы, причём из фрейма
   б) у penguinus другой случай - страница новая
 
 

Всего записей: 631 | Зарегистр. 05-04-2002 | Отправлено: 06:55 16-06-2003 | Исправлено: PaulGor, 06:56 16-06-2003
KostiKL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, сорри что вклиниваюсь, но проблемы слегка похожие...
Может поможете!
Залил свой сайтик на буржуйский сервер (www.brinkster.com)
Ничего окромя Access-ных БД да ASP не использую.
Проблема вот в чем: содержимое одной из страниц сайтика склеивается с помощью ASP-скрипта из текстовых файлов. Выглядит примерно так:

Код:
 
Dim FileObject, oInStream, strOutput
Set FileObject = CreateObject("Scripting.FileSystemObject")
strFileName = Server.MapPath(rs.Fields("FileName"))
Set oInStream = FileObject.OpenTextFile(strFilename, 1, 0, 0)
do while not oInStream.AtEndOfStream
 strOutput = oInStream.ReadLine
 Response.Write strOutput
loop
 

Дык вот трабл в том, что все что текст, который выводится из ASP-кода непосредственоо, например  

Код:
 
<%
Response.Write "Привет!"
%>
 

выводится нормально, а

Код:
 
Response.Write strOutput
 

т.е. то, что прочитано из текстового файла выводится жуткими закарючками.
В загаловке страницы стоит кодировка windows-1251 плюс session.codepage=1251 проставлено! Я уж и файлы эти текстовые в каких только кодировках не сохранял и че с ними тока не делал - не помогает!
Пробовал еще Response.codepage=1251 задавать - это вообще приводит к тому, что страница пустой вылезает.
Ну вот пока и все! Помогите кто чем может...
 
Добавлено
Локально на IIS все OK!

Всего записей: 669 | Зарегистр. 04-02-2003 | Отправлено: 01:53 25-06-2003
PaulGor



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KostiKL,
Если данные читаются из файла, то в АСП есть специальная команда, сообщающая АСП, что за кодировка у данных в этом самом файлe - см. @CODEPAGE
 

Всего записей: 631 | Зарегистр. 05-04-2002 | Отправлено: 03:36 25-06-2003 | Исправлено: PaulGor, 03:37 25-06-2003
KostiKL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PaulGor
Пробовал...
Если я правльно понимаю, то для файлов с кодировкой Windows-1251 (то есть написанных например в Блокноте) надо поставить

Код:
 
<%
....
@CODEPAGE=1251
....
%>
 

Если так, то я это прходил уже - не помогает!

Всего записей: 669 | Зарегистр. 04-02-2003 | Отправлено: 20:18 25-06-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Закладки » Проблема с кодировкой в странице, сгенереной JavaScript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru