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?
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
You need to UrlEncode the querystring values.
HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default)
solves the problem.
精彩评论