Кодированные символы Unicode потеряны - PullRequest
2 голосов
/ 10 ноября 2011

Я отправляю

MyApp.aspx?url=http://product.cn.china.cn/selling-leads/%C8%BC%C6%F8%D4%EE%BE%DF/ 

URL как запрос GET к моему приложению ASP.NET. Китайские символы закодированы в URL. Я пытаюсь прочитать значение параметра URL с

httpRequest.Params["url"] 

и получите такой результат

http://product.cn.china.cn/selling-leads/ȼ�����/

Закодированная часть потеряна. В чем проблема?

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Вы уверены, что символы были правильно закодированы в URL?

Если я URL-адрес enode 公共汽車, я получаю %E5%85%AC%E5%85%B1%E6%B1%BD%E8%BB%8A

Если я передам %E5%85%AC%E5%85%B1%E6%B1%BD%E8%BB%8A в качестве параметра запроса, он будет работать нормально, но не с вашей строкой, %C8%BC%C6%F8%D4%EE%BE%DF.

Если я попытаюсь декодировать вашу строку с помощью онлайнового кодировщика / декодера URL , это также не сработает, аналогично, если я попытаюсь System.Text.Encoding.UTF8.GetString.

Так что я думаю, что проблема в том, что отправляемая вами строка была закодирована неправильно.

** ОБНОВЛЕНИЕ **

При ближайшем рассмотрении выясняется, что символы в строке URL-адреса закодированы в GBK (на странице, на которую вы ссылаетесь, также указано, что используемый набор символов - это GBK).

Я не уверен, как именно это сделать, но если вам нужен параметр URL в другой кодировке, вам нужно будет преобразовать GBK в эту другую кодировку.

** ОБНОВЛЕНИЕ **

ОК, думаю, я понял :) 1030 *

Похоже, ASP.NET декодирует URL, используя неправильную кодировку. Вы можете заставить ASP.NET декодировать запросы как GBK, добавив это в ваш файл web.config:

<system.web>
  <globalization requestEncoding="gbk" />
</system.web>

Если по какой-то причине вы не хотите этого делать, вам придется самостоятельно проанализировать и декодировать необработанный URL-адрес:

// TODO: Grab this from Request.RawUrl
string urlParam = "%C8%BC%C6%F8%D4%EE%BE%DF";

// Source encoding is GBK
Encoding gbk = Encoding.GetEncoding("gbk");

string decodedParam = HttpUtility.UrlDecode(urlParam, gbk);

decodedParam теперь будет содержать то, что вы хотите, 燃气灶具 ("газовая плита", я думаю:)

0 голосов
/ 10 ноября 2011

Хорошо, у меня была такая же проблема с ивритом

Вы должны использовать HttpUtility.UrlDecode и HttpUtility.UrlEncode ()

Как это

dim str=HttpUtility.UrlEncode("the string that add to the url")

(Иконечно, чтобы отправить str в URL)

И на странице получения используйте это

dim temp as string=HttpUtility.UrlDecode(httpRequest.Params["url"] , System.Text.Encoding.Default())

Вы можете сделать это также в javascript

escape(value) этофункция для кодирования текста

, и вы можете использовать на стороне сервера, как это:

dim temp as string=HttpUtility.UrlDecode(httpRequest.Params["url"] , System.Text.Encoding.Default())
...