2014-02-04 3 views
4

В моем приложении MVC 3 у меня есть несколько файлов resx со строками сообщений, такими как: "Editer groupe détails". Все они используются для заголовков окон или подтверждений/предупреждений. Таким образом, чтобы иметь возможность использовать их в моих различных файлах .js, я создал на моей главной странице объект Javascript с именем localizedRessources. Проблема в том, что строки изменяются в этом объекте, например, вышеупомянутая строка становится "Editer groupe détails".Javascript преобразует французские специальные символы

Какие у меня варианты? Есть ли специальная функция, которая сообщает JS не кодировать их? Есть ли способ напрямую использовать строки в моих .js-файлах? (это работает, кстати, в некоторых случаях, но я бы предпочел, чтобы у меня не было слишком большого кода js в моих файлах cshtml).

У меня есть тег <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">, добавленный в мой элемент <head> для всех страниц, поэтому я в порядке. Любые предложения приветствуются.

+0

использование UTF-8, чтобы избежать путаницы преобразования – metadings

+0

Вместо iso-8859-1? –

+0

Да, _especially_ вместо iso-8859-1. .net использует utf-16 изначально, javascript utf-8, и при использовании PHP просто сохраняйте все в UTF-8 без спецификации, тогда вы сэкономите много проблем - со всем, что я имею в виду, '. * html'' .css' '.js' и т. д. – metadings

ответ

3

Согласно вашему комментарию

<script type="text/javascript" charset="utf-8"> 
/*...*/ 
var localizedResources = { 
    FailedUploadErrorMessage: '@Resources.GeneralLocalization.FailedUploadErrorMessage' 
/*...*/ 

вы пытались оказать JavaScript с помощью ASP.NET MVC Razor. Обычно Razor избегает специальных символов для объектов, например & становятся &amp; неименованные объекты, такие как é становятся &#233;. В javaScript вам нужны эти символы либо нативные в UTF-8/16 (или, если это действительно невозможно, такие как \u00E9).

В Razor @ заставляет механизм рендеринга выводить кодированное, экранированное, сущностное представление в HTML.

При рендеринге JavaScript вы не хотите Бритвы неявное вытекание, так что вам нужно

<script type="text/javascript" charset="utf-8"> 
/*...*/ 
var localizedResources = { 
    FailedUploadErrorMessage: '@Html.Raw(Resources.GeneralLocalization.FailedUploadErrorMessage)' 
/*...*/ 

И упс: также javaScript is UTF-16 (с некоторыми оговорками)

Смежные вопросы