2010-08-15 3 views
2

Здравствуйте!ASP.NET MVC 2 - Проблема с кодировкой запроса

Существует контроллер и действие, которое получает один из параметров через GET, примерно вот так:

< www.site.com/controller/action/?query=параметр - русское слово

Проблема:

Пример 1: www.site.com/controller/action/?query=Пример < - русское слово

Пример 2: www.site.com/controller/action/?query=Example

Чтения пары:

var param = Request.QueryString["query"]; 

Результат 1:

param = "������" 

Данные из отладчика:

Request.RawUrl = "/controller/action/?q=%CF%F0%E8%EC%E5%F0" 
QueryString = {q=%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd} 

Результат 2:

param = "Example" 

Данные из отладчика:

Request. RawUrl = "/controller/action/?q=Example" 
QueryString = {q=Example} 

ContentEncoding выставиться в UTF-8.

Web.config: 
<globalization requestEncoding="utf-8" responseEncoding="utf-8" 
      fileEncoding="utf-8" /> 

Вопрос: Как я правильно получить параметры с русским словом?

ответ

0
HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default) 

решает проблему.

+0

Вы должны отметить вопрос как ответ –

2

Вы не должны использовать русские слова в URI (и даже не стоит пробовать). Вы должны закодировать их.

RFC 1738: Унифицированные локаторы ресурсов (URL) спецификация

..Only буквенно-цифровые [0-9a-Za-Z], специальные символы "$ -_ + * '()." [Не включая кавычки), а зарезервированные символы, используемые для их зарезервированных целей, могут использоваться в незашифрованном URL-адресе.

Если пользователи собираются ввести URL-адресов себя в России - (для поиска), вы можете попробовать UrlDecode Request.Url

+0

спасибо! UrlDecode работает. HttpUtility.UrlDecode (Request.QueryString ["q"], Encoding.Default); Но очень странно, что Encoding.Default - win-1251. Я почему-то думал, что Win7 полностью использует Unicode :( – meridian

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