PDA

Просмотр полной версии : Кодировка и отображение текста


Angelinka
18.05.2009, 15:19
Здравствуйте!
У меня вечный вопрос для флешеров, которые работают с интернетом.
Если передавать переменную во флеш через браузер, то флеш не отображает русский текст в ИЕ. Текст передается в кодировке UTF-8, так что, все должно, по логике вещей, работать. Работает во всех браузерах, кроме IE. System.useCodepage = true; не оказывает никакого влияния. Если в IE в панеле выбрать вручную кодировку UTF-8 - то текст отображается, но все символы самого сайта становятся иероглифами.
Облазила весь форум, нигде ничего ясно не написано. Либо пишут, что это уже обсуждалось - ищите, либо не могут дать ответ. Пожалуйста, помогите же кто-то. Ведь с этой проблемой сталкиваются многие разработчики.
Большое спасибо.

Stargazer
18.05.2009, 17:55
System.useCodepage никогда не используйте.

Проблема у вас вот в чём.
Вы переменную передаёте во флеш через что? Через браузер. А кодировка страницы какая? Явно не UTF-8. А вам нужен именно он.

Если переменная не длинная - вбейте содержимое через /uXXXX.

Angelinka
18.05.2009, 18:22
Простите, а можно подробнее на счет /uXXXX, а то мне не знаком такой прием. Спасибо.

Stargazer
18.05.2009, 19:13
Подробнее и вместе с тем профессионально - сложно. Потому что я мало занимаюсь js (хотя с такой же как у вас проблемой сталкивался, но давно. не помню точно, как решил её). Смысл в том, чтобы указать данные именно в формате юникода.

Вот что я сейчас нашёл в поиске:
1. %uXXXX (где ХХХХ - это кодировка символа в юникоде) позволяет записать символ из юникода. (то есть, я неправильно подсказал насчёт слэша - вам нужен именно % ).
2. Советуют использовать encodeURI(). С функцией знаком, но деталей её работы уже давно не смотрел и не вспоминал.

Angelinka
18.05.2009, 19:45
Получается, что смысл этого всего - перекодирование, да?
Ну так я и так подаю текст в юникоде, кодирую через PHP iconv.

aksios
18.05.2009, 19:55
Покажите заголовок вашей странички.

Angelinka
18.05.2009, 20:36
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">

xzwiex
18.05.2009, 20:39
charset=windows-1251
а говорите utf-8 =)

Angelinka
18.05.2009, 20:44
я говорю, что данные переменных передаю в utf-8

aksios
18.05.2009, 21:49
Angelinka, Вы грузите. Поменяйте кодировку в заголовке.
Лучше через dreamweaver

Angelinka
18.05.2009, 22:06
И весь текст на странице станет не читабельным. Мне нужно чтобы эта флешка работала на всех сайтах, а я не могу знать какая там у них кодировка. Эта флешка будет распространятся по сети.

aksios
18.05.2009, 22:29
Angelinka, вам рассказать, как сделать так, чтобы при смене кодировки Ваш html текст не пропал?
Если Вы хотите не учитывать кодировку браузера в принципе - нужно написать во флеше анализатор и перекодировщик текста. Это не сильно сложно сделать. Но это - кривое решение.

Stargazer
18.05.2009, 22:31
Angelinka, вы не понимаете сути дела. Вы воспользовались конвертированием части страницы в формат в UTF-8, но при этом заголовки вашей страницы указывают, что содержимое этой страницы записано в cp1251. Понимаете, откуда берётся проблема?

Почитайте про %uXXXX и про encodeURI(). Это то, что вам нужно.
(Upd: точнее почитайте про encodeURI и решите, подходит ли он вам. Либо пишите вручную через символ процента.)

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

Полноте вам, господин aksios. Зачем так пугать людей?

aksios
18.05.2009, 22:44
Полноте вам, господин aksios. Зачем так пугать людей?
По условию, как я понимаю, флешка должна работать на произвольном браузере с произвольными настройками (включая отключеный js), более того, с абсолютно разных сайтов, на которых видимо нет возможности менять содержимое странички.
Где то так. Так вот, по Вашему, я пугаю?

Stargazer
18.05.2009, 23:21
Так вот, по Вашему, я пугаю?

Естественно. Потому что есть простейший способ: вписать всю вручную через (возможно, это называется escape-последовательности. а возможно это и не совсем они) символы юникода.

Вы были так уверены, что мне пришлось перепроверить самому.

Вот строка:
<param name="FlashVars" value="russianText= & #1071;& #1041;& #1083;& #1054;& #1050;& #1054;">

Флеш замечательно читает русское слово "ЯБлОКО" вне зависимости от кодировки и без помощи джаваскрипта.

Angelinka
19.05.2009, 04:55
<param name="FlashVars" value="russianText= & #1071;& #1041;& #1083;& #1054;& #1050;& #1054;">

Большое спасибо. Я наконец поняла в каком формате передавать текст. Будем пробовать.

Stargazer
19.05.2009, 14:35
Пожалуйста. В итоге это оказались не слеши и не проценты. Всё смешалось в голове от разных языков.

Между & и #, естественно, не должно быть пробелов. (если бы я написал без пробелов - форум бы перевёл эти коды в символы и было бы видно то самое "яблоко").

Angelinka
25.05.2009, 18:46
Проблема только в том теперь, что вместо 6 символов в слове яблоко теперь 36. А если нужно строку в 30 символов или больше... Неужели нет другого способа?

Stargazer
25.05.2009, 20:42
Проблема только в том теперь, что вместо 6 символов в слове яблоко теперь 36. А если нужно строку в 30 символов или больше... Неужели нет другого способа?

Вы ведь хотели решение, полностью независимое от окружения? Это оно и есть.

Найдите в Интернете скрипт, который будет перекодировать (я где-то видел, но не хочу искать). Копируете в поле результат - получаете строку, закодированную символами юникода. Осталось вставить её в ваш хтмл.

Если хотите - воспользуйте джаваскриптом, смотрите в сторону encodeURI или других функций, которые дадут нужный результат. Но тогда ваша флешка будет зависит от доступности джаваскрипта.

Angelinka
12.06.2009, 18:24
Как оказалось после всего сказанного, в опере это не работает. Я уже не знаю что делать, я была в шоке когда увидела в опере знаки вопроса. Проверяла много раз - ничего. Я уже потеряла надежду на выход из ситуации :(

Добавлено через 21 минуту
В общем, ребята, если у кого-то есть проблемы с передаваемыми переменными во флеш - используйте лучше SWFObject и через JS вставляйте флеш на страницы. Тогда и с текстом проблем нет, и стандарты поддерживаются, да и код по-проще будет даже.

Stargazer
12.06.2009, 23:26
Как оказалось после всего сказанного, в опере это не работает...

...используйте лучше SWFObject и через JS вставляйте флеш на страницы. Тогда и с текстом проблем нет, и стандарты поддерживаются, да и код по-проще будет даже.

Конкретно этот вариант не может не работать в Опере, потому что сочетание & и # является документированной возможностью хтмл и используется уже очень давно. Видимо, вы что-то другое не учли.

К тому же - снова повторюсь. Я уже решал эту проблему таким образом. А свои решения я всегда тестирую на совместимость с IE, Opera и Firefox.

LaST89
03.07.2009, 19:12
есть флэш-сайт и xml файл в котором прописаны пути фоток, тексты, меню и т.п.. не могу сделать русское отображение букв.. изначально была кодировка iso-8859-1, пробовал менять на windows-1251 и utf-8 - не помогает - остается пустое поле, как можно это решить?

Stargazer
04.07.2009, 02:16
как можно это решить?

Решить именно сменой кодировки содержимого xml на формат UTF-8. Обратите внимание, что имеет значение, не запись о кодировке в тексте xml, а фактическая кодировка символов в файле.

LaST89
04.07.2009, 18:26
Решить именно сменой кодировки содержимого xml на формат UTF-8. Обратите внимание, что имеет значение, не запись о кодировке в тексте xml, а фактическая кодировка символов в файле.
Stargazer, я не могу понять, извините, а как можно так сохранить? как-то в dreamweaver..?

Wolsh
04.07.2009, 21:36
В блокноте - Файл >> Cохранить как >> Кодировка (cамый нижний селектор) >> UTF8

LaST89
04.07.2009, 22:59
не ребят, чет не получается все равно, делал, как говорили, может кто-нибудь сможет помочь, пожалуйста, разобраться в правильном отображении русской кодировки.. вот ссылка на файлы: http://***************/files/251921004/TM_22137.rar.html файл "22137_main.xml" - там практически все отображение текста сайта

Wolsh
05.07.2009, 10:11
А шрифты с кириллицей внедрены (embed)?

LaST89
05.07.2009, 17:27
А шрифты с кириллицей внедрены (embed)?
я шрифты которые в меню заменял на arial в рабочей среде flash, скомпилировал фильм, но не сохранял исходник сам..

Wolsh
06.07.2009, 00:08
Я спрашивал не про то, какой шрифт, а внедрена ли кириллица. Я думаю - нет. Нет символов кириллицы во флэшке - нет и русских слов, даже если Вы все правильно передаете в xml. Латинские символы нормально отображаются?

LaST89
06.07.2009, 00:53
Я спрашивал не про то, какой шрифт, а внедрена ли кириллица. Я думаю - нет. Нет символов кириллицы во флэшке - нет и русских слов, даже если Вы все правильно передаете в xml. Латинские символы нормально отображаются?
латинские символы все нормально, отображаются

Wolsh
06.07.2009, 10:50
Ну вот, исправляйте.

LaST89
06.07.2009, 19:12
все спасибо, разобрался в cs4 правка текста properties/character embedding