2

ASP.NET 页面 (ashx) 接收GET带有 UTF8 字符串的请求。它使用 Windows-1255 数据读取 SqlServer 数据库。

我似乎无法让他们一起工作。我使用了在 SO 上收集的信息(主要是Convert a string's character encoding from windows-1252 to utf-8)以及有关该主题的msdn 。

当我通过以下函数运行任何东西时 - 它总是以与开始时相同的方式结束 - 根本没有转换。

是不是做错了什么?

编辑

我特别想做的事情(getData返回 a Dictionary<int, string>):

getData().Where(a => a.Value.Contains(context.Request.QueryString["q"]))

结果为空,除非我发送“中性”字符,例如“'”或“,”。

代码

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

2 回答 2

1

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

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

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

于 2013-01-13T12:39:35.727 回答
0

由于某种原因,这有效:

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

在不转换的情况下切换编码...

于 2013-01-20T08:02:33.517 回答