1

我有一个基于 c# 的应用程序。这是我的代码片段

private void ProcessRequest(IAsyncResult result)
{
       HttpListenerContext context = httpListener.EndGetContext(result);
       HttpListenerRequest request = context.Request;
       HttpListenerResponse response = context.Response;
       NameValueCollection queryString = getQueryStringFromRequest(request);
       …….
}

我得到的回复只有英文。然而,有时我会得到其他语言的部分回复,比如冰岛语。然后我的应用程序无法相应地格式化字符串。例如在 queryString 我得到这样的东西:

{ ENTITY_NAME=Contact&OBJECT_NAME=Mr.+Hl%ufffd%ufffdar+Hl%ufffd%ufffdberg}

但是对象名称应该是Mr. Hlíðar Hlíðberg

我知道这个问题是无法根据双字节字符解析它。我尝试了类似的东西:

if (queryString["OBJECT_NAME"] != null){
   string s_unicode = queryString["OBJECT_NAME"];
   System.Text.Encoding iso_8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1");
   System.Text.Encoding utf_8 = System.Text.Encoding.UTF8;
   byte[] utfBytes = utf_8.GetBytes(s_unicode);
   byte[] isoBytes = Encoding.Convert(utf_8, iso_8859_1, utfBytes);                  
   string msg = iso_8859_1.GetString(isoBytes);
 }

但我仍然得到像Hl??ar Hl??berg 先生这样的回应, 但它对我没有用。此外,我从不喜欢这种方法,因为它是特定的,并且需要硬编码,例如。在这种情况下的关键。

那么,我该怎么做。我可以通过配置文件或通用做些什么吗?

4

0 回答 0