Странные символы в Javascript, заставляющие его не загружаться - PullRequest
7 голосов
/ 25 марта 2011

Мой сайт работает нормально на localhost, мой javascript загружается и работает нормально.Но когда я разворачиваю сайт, скрипт не работает.Когда я щелкаю правой кнопкой мыши страницу и говорю «просмотреть источник», а затем просматриваю связанный файл скрипта, в начале файла появляются странные символы ï »¿ (function ($) {

На localhost мой файл скрипта начинается так: (function($){

Что вызывает добавление этих символов в мой файл javascript?

Ответы [ 3 ]

6 голосов
/ 25 марта 2011

Необходимо повторно сохранить файл в кодировке «UTF-8 без BOM». Вы можете использовать Notepad ++ или другие редакторы.

В визуальной студии:

По умолчанию Visual Studio использует кодировку UTF с спецификацией; однако вы можете сохранить его в другой кодировке, если хотите. Когда вы переходите в диалоговое окно «Сохранить как», вы можете развернуть кнопку «Сохранить», чтобы увидеть параметр «Сохранить с кодировкой». Это предложит вам другую кодировку, и я думаю, что одна из опций Unicode пропустит спецификацию (где-то в списке UTF-8 без подписи).

Источник: http://forums.silverlight.net/forums/t/144306.aspx

1 голос
/ 13 апреля 2012

Я только что столкнулся с этой же проблемой и нашел исправление.

В ответ на вопрос Мартжина проблема заключается в том, что эти символы спецификации URF-8 делают недействительным javascript, когда клиент ожидает чистый ASCII. Таким образом, он скажет, что есть ошибка в char 1, строка 1 или что-то подобное, в основном, в самом начале файла, потому что это делает кодовый файл похожим на опечатку в первых нескольких байтах скрипта.

В моем случае у меня есть сайт в IIS, который является приложением ASP.NET, и приложение под ним, которое также является приложением ASP.NET. Это вызвало некоторые сложности с наследованием файла web.configs, и решение состояло в том, чтобы поместить тег, который отменяет наследование с этого момента.

Затем я обнаружил, что все мои .js на дочернем сайте выдавали ошибку для этого глупого символа кодировки UTF-8, который был первыми 3 байтами каждого файла. Я достаточно уверен, что это вызвано некоторой путаницей в httphandlers из моего двухуровневого решения для web.configs.

Однако мое решение заключалось в том, чтобы преобразовать файлы .js обратно в чистый ASCII, поскольку именно это отправлял IIS и ожидал клиент. Для меня у меня есть build.bat, который копирует все веб-файлы, удаляет все элементы управления исходным кодом и файлы проекта и помещает их в окончательный каталог сборки для копирования на тестовый или рабочий сервер. Я внес изменение в этот скрипт, чтобы также преобразовать все файлы .js в формат ASCII.

Он использует комбинацию пакета DOS (потому что это то, с чего я начал) и PowerShell (потому что это единственный способ конвертировать без добавления еще большего количества служебных программ):

set DIRTOCONVERT = любой путь, по которому вы хотите конвертировать все файлы для ECHO удалить символы UTF-8 BOM »? с начала файлов for / r% DIRTOCONVERT% %% g in (* .js) do ( powershell -команда "gc -en utf8 \" %% g \ "| Out-File -en ascii. \ tmp.txt" move / y. \ tmp.txt "%% g" )

Обратите внимание, что несколько человек онлайн (даже в StackOverflow) решили попробовать: введите badfile.txt> goodfile.txt

но это все еще переносит кодировку UTF-8. Видимо, раньше это не делали.

1 голос
/ 25 марта 2011

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

Когда вы передаете файл, он обслуживается с Content-type, как

Content-Type: text/javascript;charset=US-ASCII

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

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