ASP.NET页面(ashx)收到带有UTF8字符串的GET
请求。它使用Windows-1255数据读取SqlServer数据库。
我似乎无法让他们一起工作。我已经使用了在SO上收集的信息(主要是Convert a string's character encoding from windows-1252 to utf-8)以及关于这个主题的msdn。
当我通过下面的函数运行任何东西时 - 它总是与它开始时一样 - 根本没有转换。
做错了什么?
修改
我特意尝试做的事情(getData
返回Dictionary<int, string>
):
getData().Where(a => a.Value.Contains(context.Request.QueryString["q"]))
结果为空,除非我发送“中性”字符,例如“'”或“,”。
CODE
string windows1255FromUTF8(string p)
{
Encoding win = Encoding.GetEncoding(1255);
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(p);
byte[] winBytes = Encoding.Convert(utf8, win, utfBytes);
return win.GetString(winBytes);
}
string UTF8FromWindows1255(string p)
{
Encoding win = Encoding.GetEncoding(1255);
Encoding utf8 = Encoding.UTF8;
byte[] winBytes = win.GetBytes(p);
byte[] utfBytes = Encoding.Convert(win, utf8, winBytes);
return utf8.GetString(utfBytes);
}
答案 0 :(得分:1)
这些功能没有任何问题,它们根本没用。
这些函数的作用是将字符串编码为字节,将数据从一种编码转换为另一种编码,然后将字节解码回字符串。除非字符串包含无法使用windows-1255编码进行编码的字符,否则返回的值应与输入相同。
.NET中的字符串没有编码。如果从使用例如UTF-8编码文本的源获取字符串,则一旦将其解码为字符串,它就不再具有该编码。当目标具有特定的编码时,您不必对字符串执行任何操作,无论您使用哪个库,该字符串都将负责编码。
答案 1 :(得分:0)
出于某种原因,这有效:
byte[] fromBytes = (fromEncoding.UTF8).GetBytes(myString);
string finalString = (Encoding.GetEncoding(1255)).GetString(fromBytes);
在没有转换的情况下切换编码...