views:

99

answers:

3

Hello!

There is a controller and an action which receives one param through GET, approximately here so:

www.site.com/controller/action/?query=параметр <- Russian word

Problem:

Example 1: www.site.com/controller/action/?query=Пример <- Russian word

Example 2: www.site.com/controller/action/?query=Example

Reading param:

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

Result 1:

  param = "������"

The data from debugger:

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

Result 2:

param = "Example"

The data from debugger:

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

ContentEncoding is setted into UTF-8.

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

Question: How can i correctly get param with russian word?

A: 

You should never use Russian words in URI (и даже не стоит пробовать). You should encode them.

RFC 1738: Uniform Resource Locators (URL) specification

..Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.

If your users going to enter urls themselves in russian - (for searching) you can try UrlDecode Request.Url

Sergey Mirvoda
Thank you very much!UrlDecode works. HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default);But very strange, that Encoding.Default is win-1251. I for some reason thought that Win7 fully uses Unicode :(
meridian
@meridian. You should mark question as answered.
Sergey Mirvoda
A: 

You need to UrlEncode the querystring values.

mhenrixon
A: 
HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default) 

solves the problem.

meridian
You should mark question as answered
Sergey Mirvoda