编码不转换

时间:2013-01-13 12:27:06

标签: c# asp.net encoding

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);
    }

2 个答案:

答案 0 :(得分:1)

这些功能没有任何问题,它们根本没用。

这些函数的作用是将字符串编码为字节,将数据从一种编码转换为另一种编码,然后将字节解码回字符串。除非字符串包含无法使用windows-1255编码进行编码的字符,否则返回的值应与输入相同。

.NET中的字符串没有编码。如果从使用例如UTF-8编码文本的源获取字符串,则一旦将其解码为字符串,它就不再具有该编码。当目标具有特定的编码时,您不必对字符串执行任何操作,无论您使用哪个库,该字符串都将负责编码。

答案 1 :(得分:0)

出于某种原因,这有效:

byte[] fromBytes = (fromEncoding.UTF8).GetBytes(myString);
string finalString = (Encoding.GetEncoding(1255)).GetString(fromBytes);

在没有转换的情况下切换编码...