Вопрос о кодировке Javascript - PullRequest
3 голосов
/ 25 февраля 2009

У нас есть внешний файл .js, который мы хотим включить в несколько разных страниц. Файл содержит код для сортировки таблицы на стороне клиента и использует символы ▲ и ▼ в скрипте, чтобы указать, какой столбец отсортирован и в каком направлении.

Первоначально сценарий был написан для страницы ASP.Net для разгрузки некоторой работы по сортировке с сервера на клиент (предотвращение сортировки обратных ссылок, когда включен JavaScript). В этом случае кодировка почти всегда UTF-8, и она прекрасно работает в этом контексте.

Однако у нас также есть несколько старых классических ASP-страниц, в которые мы хотим включить скрипт. Для этих страниц кодировка является скорее сборной соломой, в зависимости от того, кто и когда написал страницу, и каким инструментом они пользовались (блокнот, vs6, vs2005, другой помощник по HTML). Часто на странице не указывается кодировка, поэтому выбор зависит от браузера, но на самом деле нет строгого правила, которое я вижу.

Проблема в том, что при использовании другой кодировки (не UTF8) символы ▼ и ▲ не будут отображаться правильно. Вместо этого я попытался использовать html-объекты, но не смог заставить их работать хорошо из javascript.

Как я могу настроить скрипт для различных возможных кодировок так, чтобы «специальные» символы всегда отображались правильно? Могу ли я использовать разные символы или трюк, который я пропустил, чтобы заставить объекты html работать из javascript?

Вот фрагмент кода, в котором используются символы:

// get sort direction, arrow
var dir = 1;
if (self.innerHTML.indexOf(" ▲") > -1)           
     dir = -1;
var arrow = (dir == 1)?" ▲":" ▼"; 

// SORT   -- function that actually sorts- not relevant to the question
if  (!SimpleTableSort(t.id, self.cellIndex, dir, sortType)) return;

//remove all arrows
for (var c = 0,cl=t.rows[0].cells.length;c<cl;c+=1)
{
    var cell = t.rows[0].cells[c];
    cell.innerHTML = cell.innerHTML.replace(" ▲", "").replace(" ▼", "");
}

// set new arrow
self.innerHTML += arrow;

Для любопытных использовались следующие кодовые точки с принятым ответом: \ u25B4 и \ u25BC.

Ответы [ 3 ]

7 голосов
/ 25 февраля 2009

Кодировка файла JavaScript зависит от кодировки страницы HTML, в которую он встроен. Если у вас есть файл JavaScript UTF-8 и страница HTML ISO-8859-1, JavaScript интерпретируется как ISO-8859-1.

Если вы загружаете JavaScript из внешнего файла, вы можете указать кодировку JavaScript:

<script type="text/javascript" charset="UTF-8" src="externalJS.js"></script>

В любом случае, лучший вариант - сохранить все файлы, связанные с веб-проектом, в одной кодировке, рекомендуется UTF-8.

6 голосов
/ 25 февраля 2009

Вы хотите, чтобы Javascript Unicode избегал, т. Е. "\ Uxxxx", где "xxxx" - это кодовая точка Unicode для символа. Я считаю, что "\ u25B2" и "\ u25BC" - это те, которые вам нужны.

1 голос
/ 25 февраля 2009

Я голосовал за оба. Я думаю, что оба ответа, вместе взятые, будут вашим лучшим выбором.

Возможно, вам придется написать сценарий дважды, вставив часть для UTF-8 и вставив часть для не UTF-8. Это больше проблем, и может не работать все время, все еще.

Кто-то должен придумать стандарты для ваших разработчиков. Если вы все напишете хотя бы с одной и той же кодировкой, в будущем вам будет намного легче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...