【求助】网页源码从byte[]到string再到byte[]

环境:VS2005 C# winform

我在做一个C#下IE MIME过滤,针对text/html数据。流程可以概括为:

1:IE传给我byte[]数据

2:我将byte[]数据转换成string

3: 我处理string

4:我将处理过的string再转换成byte[]传给IE

C# code

        private string BytesToString(byte[] data,out string charSet)
        {
            charSet = "";
            string sHtml = Encoding.Default.GetString(data);
            string CharSet = "";

            Regex rg = new Regex("<meta.+?charset=(?<name>.*?)\".*?>", RegexOptions.IgnoreCase);
            Match m = rg.Match(sHtml);

            if(m.Success)
            {
                CharSet = m.Groups["name"].Value;
                charSet = CharSet;
            }

            if (CharSet.Length > 0)
            {
                sHtml = Encoding.GetEncoding(CharSet).GetString(data);
            }

            return sHtml;
        }

        private byte[] StringToBytes(string text,string charSet)
        {
            if (charSet.Length > 0)
            { return Encoding.GetEncoding(charSet).GetBytes(text); }
            else
            { return Encoding.Default.GetBytes(text); }
        }



我觉得我的两个转换函数没什么问题了。但事实上在转换一些特殊字符时仍然可能出现错误。比如我发现有时候源码里的"*"字符被转换成了不可见字符。导致html/*注释*/出现错误,严重影响到网页内容的正确性。

byte[]-string-byte[]这里水很深啊,还请大虾们传授些经验给小弟,谢谢!

作者: Win32FanEx   发布时间: 2011-06-15

肯定是不对的。当你把byte[]转换为string,那么肯定要丢失一些信息了,然后再转回byte[],也肯定丢失一些信息了。

不要用string当作什么中间保存机制。要想保存,就用真实的byte[]来保存原始数据。

作者: sp1234   发布时间: 2011-06-15

楼上的师傅:

我处理的是text/html类型数据。可以肯定,最初数据是字符串--即网页程序员写的网页源码。但我从IE那里得到的是byte[]。比如我要过滤一下源码内容,我必需得转换成string才行。然后再转成byte[]提供给IE.

请您继续指点。

作者: Win32FanEx   发布时间: 2011-06-15