抓取下来的数据,该怎么样处理?

时间:2021-10-15 09:07:24
试了下带\u的都是Unicode,我用 HttpUtility.HtmlDecode(str)转换不成功,原来是什么样结果还是什么样。怎么样才能把下面代码中的Unicode转成汉字?


var data = {"abstract":{"show":"","all":""},"content":{"show":"<\/a>
\u7b2c\u4e09\u4e2a\u4e3b\u8981\u5185\u5bb9\u662f\u5173\u4e8e\u8bbe\u5907\u9a71\u52a8\u5b89\u88c5\uff08\u7b2c12\uff5e14\u7ae0\uff09\u3002\u7b2c12\u7ae0\u8bb2\u7cfb\u7edf\u5b89\u88c5\u6a21\u5757\uff0c\u4ece\u603b\u4f53\u89d2\u5ea6\u9610\u8ff0\u7cfb\u7edf\u548c\u8bbe\u5907\u9a71\u52a8\u5982\u4f55\u914d\u5408\u5b8c\u597d\u5730\u8fdb\u884c\u5de5\u4f5c\uff1b\u7b2c13\u7ae0\u8bb2\u8ff0INF\u5b89\u88c5\u6587\u4ef6\u7684\u7ec6\u8282\uff0c\u5305\u62ec\u5404\u4e2a\u57df\u7684\u4f5c\u7528\uff0c\u4ee5\u53ca\u8bf8\u591a\u5b89\u88c5\u6307\u4ee4\u7684\u4f7f\u7528\u3002\u7b2c14\u7ae0\u8bb2\u5982\u4f55\u7f16\u5199\u9a71\u52a8\u5b89\u88c5\u8f6f\u4ef6\u3002
\u5269\u4f59\u7684\u4e00\u4e9b\u7ae0\u8282\uff0c\u5206\u522b\u662f\u5173\u4e8e\u9a71\u52a8\u5165\u95e8\uff08\u7b2c1\u30012\u7ae0\uff09\u3001Windbg\u8c03\u8bd5\u547d\u4ee4\uff08\u7b2c8\u7ae0\uff09\u3001\u5185\u6838\u540c\u6b65\uff08\u7b2c9\u7ae0\uff09\u7b49\u5185\u5bb9\u3002<\/div>

\u7b2c\u4e09\u4e2a\u4e3b\u8981\u5185\u5bb9\u662f\u5173\u4e8e\u8bbe\u5907\u9a71\u52a8\u5b89\u88c5\uff08\u7b2c12\uff5e14\u7ae0\uff09\u3002\u7b2c12\u7ae0\u8bb2\u7cfb\u7edf\u5b89\u88c5\u6a21\u5757\uff0c\u4ece\u603b\u4f53\u89d2\u5ea6\u9610\u8ff0\u7cfb\u7edf\u548c\u8bbe\u5907\u9a71\u52a8\u5982\u4f55\u914d\u5408\u5b8c\u597d\u5730\u8fdb\u884c\u5de5\u4f5c\uff1b\u7b2c13\u7ae0\u8bb2\u8ff0INF\u5b89\u88c5\u6587\u4ef6\u7684\u7ec6\u8282\uff0c\u5305\u62ec\u5404\u4e2a\u57df\u7684\u4f5c\u7528\uff0c\u4ee5\u53ca\u8bf8\u591a\u5b89\u88c5\u6307\u4ee4\u7684\u4f7f\u7528\u3002\u7b2c14\u7ae0\u8bb2\u5982\u4f55\u7f16\u5199\u9a71\u52a8\u5b89\u88c5\u8f6f\u4ef6\u3002
\u5269\u4f59\u7684\u4e00\u4e9b\u7ae0\u8282\uff0c\u5206\u522b\u662f\u5173\u4e8e\u9a71\u52a8\u5165\u95e8\uff08\u7b2c1\u30012\u7ae0\uff09\u3001Windbg\u8c03\u8bd5\u547d\u4ee4\uff08\u7b2c8\u7ae0\uff09\u3001\u5185\u6838\u540c\u6b65\uff08\u7b2c9\u7ae0\uff09\u7b49\u5185\u5bb9\u3002
\u672c\u4e66\u9002\u5408\u4e00\u822c\u5165\u95e8\u7ea7\u5185\u6838\u7a0b\u5e8f\u5458\uff0c\u5bf9WDF\u6709\u5174\u8da3\uff0c\u51c6\u5907\u5f00\u53d1USB\u62161394\u8bbe\u5907\u9a71\u52a8\u8005\uff0c\u672c\u4e66\u5c24\u5176\u6709\u7528\u3002\u672c\u4e66\u5bf9\u4e8e\u5165\u884c\u8f83\u4e45\uff0c\u7ecf\u9a8c\u4e30\u5bcc\u7684\u7a0b\u5e8f\u5458\uff0c\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u53c2\u8003\u4ef7\u503c\u3002"},"authorintro":{"show":"","all":""},"catalog":{"show":"<\/a>
\u7b2c1\u7ae0 Hello World\u9a71\u52a8 
1.1 \u4eceHello World\u5f00\u59cb 
1.2 \u865a\u62df\u73af\u5883 
1.3 \u5c0f\u7ed3 
\u7b2c2\u7ae0 \u5546\u4e1a\u9a71\u52a8\u5f00\u53d1\u6280\u672f 
2.1 \u5efa\u7acb\u5f00\u53d1\u8c03\u8bd5\u73af\u5883 
2.2 64\u4f4d\u9a71\u52a8\u5f00\u53d1\u6280\u672f 
2.3 \u9a71\u52a8\u7a0b\u5e8f\u7684\u53d1\u5e03\u4e0e\u6d4b\u8bd5 
2.4 \u5c0f\u7ed3 
\u7b2c3\u7ae0 WDF\u6982\u8ff0 
3.1 \u4e3b\u8981\u7279\u70b9 
3.2 \u6846\u67b6\u89c6\u56fe 
3.3 \u517c\u5bb9\u6027 
3.4 \u5bf9\u8c61\u6a21\u578b 
3.5 \u9a71\u52a8\u5bf9\u8c61\u548c\u8bbe\u5907\u5bf9\u8c61 <\/div>
\u663e\u793a\u5168\u90e8\u4fe1\u606f<\/a><\/div>","all":"\u7b2c1\u7ae0 Hello World\u9a71\u52a8 
1.1 \u4eceHello World\u5f00\u59cb 
1.2 \u865a\u62df\u73af\u5883 
1.3 \u5c0f\u7ed3 
\u7b2c2\u7ae0 \u5546\u4e1a\u9a71\u52a8\u5f00\u53d1\u6280\u672f 
2.1 \u5efa\u7acb\u5f00\u53d1\u8c03\u8bd5\u73af\u5883 
2.2 64\u4f4d\u9a71\u52a8\u5f00\u53d1\u6280\u672f 
2.3 \u9a71\u52a8\u7a0b\u5e8f\u7684\u53d1\u5e03\u4e0e\u6d4b\u8bd5 
2.4 \u5c0f\u7ed3 
\u7b2c3\u7ae0 WDF\u6982\u8ff0 
3.1 \u4e3b\u8981\u7279\u70b9 
3.2 \u6846\u67b6\u89c6\u56fe 
3.3 \u517c\u5bb9\u6027 
3.4 \u5bf9\u8c61\u6a21\u578b 
3.5 \u9a71\u52a8\u5bf9\u8c61\u548c\u8bbe\u5907\u5bf9\u8c61 
3.6 IO\u6a21\u578b 
3.7 PNP\u548c\u7535\u6e90\u6a21\u578b 
3.8 \u5c0f\u7ed3 
\u7b2c4\u7ae0 WDF USB\u8bbe\u5907\u9a71\u52a8\u5f00\u53d1 
4.1 USB\u8bbe\u5907\u786c\u4ef6\u7ed3\u6784 
4.2 USB\u8f6f\u4ef6\u7ed3\u6784 
4.3 \u5185\u6838\u5f00\u53d1 
4.4 \u6570\u636eI\/O\u64cd\u4f5c 
4.5 \u8bbe\u5907\u63a7\u5236 
4.6 \u7528\u6237\u7a0b\u5e8f 
4.7 \u5c0f\u7ed3 
\u7b2c5\u7ae0 WDF 1394\u9a71\u52a8\u5f00\u53d1 
5.1 1394\u4e00\u5e2d\u8c08 
5.2 \u53d1\u9001\u8bf7\u6c42 
5.3 \u603b\u7ebf\u91cd\u7f6e\u4e0e\u8ba1\u6570 
5.4 PNP\u64cd\u4f5c 
5.5 \u5f02\u6b65\u901a\u4fe1 
5.6 \u7b49\u65f6\u901a\u4fe1 
5.7 \u5176\u4ed6\u64cd\u4f5c 
5.8 \u5b89\u88c5\u4e0e\u6d4b\u8bd5 
5.9 \u5c0f\u7ed3 
\u7b2c6\u7ae0 \u5185\u6838\u9a71\u52a8C++\u7f16\u7a0b 
6.1 \u9a71\u52a8\u4e2d\u7684\u7c7b 
6.2 \u7c7b\u5c01\u88c5\u7684\u9a71\u52a8\u7a0b\u5e8f 
6.3 \u591a\u6001 
6.4 \u5c0f\u7ed3 
\u7b2c7\u7ae0 WDF\u9a71\u52a8\u6d4b\u8bd5 
7.1 WDF\u9519\u8bef 
7.2 WDF\u6269\u5c55\u8c03\u8bd5\u547d\u4ee4 
7.3 WDFTester 
7.4 WDFVerifier 
7.5 \u5c0f\u7ed3 
\u7b2c8\u7ae0 \u8c03\u8bd5\u547d\u4ee4\u8be6\u89e3 
8.1 \u6982\u8ff0 
8.2 \u7b26\u53f7\u4e0e\u6e90\u7801 
8.3 \u8fdb\u7a0b\u4e0e\u7ebf\u7a0b 
8.4 \u65ad\u70b9 
8.5 \u5185\u5b58\u547d\u4ee4 
8.6 \u5c0f\u7ed3 
\u7b2c9\u7ae0 \u5185\u6838\u540c\u6b65 
\u7b2c10\u7ae0 \u97f3\u9891\u9a71\u52a8\u5f00\u53d1 
\u7b2c11\u7ae0 ASIO\u865a\u62df\u58f0\u5361 
\u7b2c12\u7ae0 \u8bbe\u5907\u9a71\u52a8\u5b89\u88c5\u5165\u95e8 
\u7b2c13\u7ae0 \u6df1\u5165\u89e3\u6790INF\u6587\u4ef6 
\u7b2c14\u7ae0 \u8bbe\u8ba1\u9a71\u52a8\u5b89\u88c5\u7a0b\u5e8f 
\u9644\u5f55A CY001 USB\u5f00\u53d1\u677f 
\u9644\u5f55B VisualKD + VMWare\u5b9e\u73b0\u5355\u673a\u5185\u6838\u8c03\u8bd5 "},"mediafeedback":{"show":""},"extract":{"show":"","all":""}}; var no_txt = "
\u672c\u5546\u54c1\u6682\u65e0\u8be6\u60c5\u3002<\/p>"; if(page_type=="mall"){ var content = data.content; if($.trim(content)!="") $("#detail_all").html(content); else $("#detail_all").html(no_txt); $("#detail_wait").hide(); $("#detail_all").show(); }else{ var abstract = data.abstract; var content = data.content; var authorintro = data.authorintro; var catalog = data.catalog; var extract = data.extract; if($.trim(data.mediafeedback["show"])!="" || $.trim(abstract["all"])!="" || $.trim(content["all"])!="" || $.trim(authorintro["all"])!="" || $.trim(catalog["all"])!="" || $.trim(extract["all"])!=""){ if($.trim(data.mediafeedback["show"])==""){ $("#mediafeedback").html(""); }else{ $("#mediafeedback").html($("#mediafeedback").html()+data.mediafeedback["show"]); } if($.trim(abstract["all"])==""){ $("#abstract").html(""); } else{ $("#abstract").html($("#abstract").html()+abstract["show"]); } if($.trim(content["all"])==""){ $("#content").html(""); }else{ $("#content").html($("#content").html()+content["show"]); } if($.trim(authorintro["all"])==""){ $("#authorintro").html(""); }else{ $("#authorintro").html($("#authorintro").html()+authorintro["show"]); } if($.trim(catalog["all"])==""){ $("#catalog").html(""); }else{ $("#catalog").html($("#catalog").html()+catalog["show"]); } if($.trim(extract["all"])==""){ $("#extract").html(""); }else{ $("#extract").html($("#extract").html()+extract["show"]); } }else{ $("#detail_all").html(no_txt); } $("#detail_wait").hide(); $("#detail_all").show(); }


14 个解决方案

#1


你这些是unicode?我记得它是16位的

#2


 C# 中  "中文"的 unicode 码 是 "%u4e2d%u6587"

#3


楼上的“中”的Unicode是4E2D "文"是6587 上面的代码 发现没?就是%u的区别。

#4


有人说是JS...像这样的怎么转成我像要的带格式的中文htm啊?

#5


 HttpUtility.HtmlDecode(str,Encoding.Uncode)//试试这样写,反正就这样的格式,怎么搞自己从写下吧

#6


我记得它是8位的

#7


引用 5 楼  的回复:
HttpUtility.HtmlDecode(str,Encoding.Uncode)//试试这样写,反正就这样的格式,怎么搞自己从写下吧


System.Web.HttpUtility.HtmlDecode(string ,TextWriter output);试了 没用

#8



                string ts = "\u7b2c\u4e09\u4e2a\u4e3b\u8981\u5185\u5bb9\u662f\u5173\u4e8e\u8bbe\u5907\u9a71\u52a8\u5b89\u88c5\uff08\u7b2c12\uff5e14\u7ae0\uff09\u3002\u7b2c12\u7ae0\u8bb2\u7cfb\u7edf\u5b89\u88c5\u6a21\u5757\uff0c\u4ece\u603b\u4f53\u89d2\u5ea6\u9610\u8ff0\u7cfb\u7edf\u548c\u8bbe\u5907\u9a71\u52a8\u5982\u4f55\u914d\u5408\u5b8c\u597d\u5730\u8fdb\u884c\u5de5\u4f5c\uff1b\u7b2c13\u7ae0\u8bb2\u8ff0INF\u5b89\u88c5\u6587\u4ef6\u7684\u7ec6\u8282\uff0c\u5305\u62ec\u5404\u4e2a\u57df\u7684\u4f5c\u7528\uff0c\u4ee5\u53ca\u8bf8\u591a\u5b89\u88c5\u6307\u4ee4\u7684\u4f7f\u7528\u3002\u7b2c14\u7ae0\u8bb2\u5982\u4f55\u7f16\u5199\u9a71\u52a8\u5b89\u88c5\u8f6f\u4ef6\u3002"
+ "\u5269\u4f59\u7684\u4e00\u4e9b\u7ae0\u8282\uff0c\u5206\u522b\u662f\u5173\u4e8e\u9a71\u52a8\u5165\u95e8\uff08\u7b2c1\u30012\u7ae0\uff09\u3001Windbg\u8c03\u8bd5\u547d\u4ee4\uff08\u7b2c8\u7ae0\uff09\u3001\u5185\u6838\u540c\u6b65\uff08\u7b2c9\u7ae0\uff09\u7b49\u5185\u5bb9\u3002";
                string ts2 = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(ts));
                textBox1.Text = ts2;



显示结果:

第三个主要内容是关于设备驱动安装(第12~14章)。第12章讲系统安装模块,从总体角度阐述系统和设备驱动如何配合完好地进行工作;第13章讲述INF安装文件的细节,包括各个域的作用,以及诸多安装指令的使用。第14章讲如何编写驱动安装软件。剩余的一些章节,分别是关于驱动入门(第1、2章)、Windbg调试命令(第8章)、内核同步(第9章)等内容。

#9


这个办法我也试过,但是无法全部转换成功,如果把我楼的代码贴上去转就无法转换了,不知道是为什么....

#10


就是说中间截取一段.用Encoding.Unicode.GetString转 可以,但是貌似只要转换的字符串中有非Unicode编码的字符(比如var data = {"abstract":{"show":"","all":""},"content":{"show":"<\/a>等等)就会造成所有的字符转换都不成功。

#11


测试:

                string sadf = "var data = {\"abstract\":{\"show\":\"\",\"all\":\"\"},\"content\":{\"show\":\"<\\/a>"
+ "\u7b2c\u4e09\u4e2a"
+ "\"},\"mediafeedback\":{\"show\":\"\"},\"extract\":{\"show\":\"\",\"all\":\"\"}}; var no_txt = \""
+ "\u672c\u5546\u54c1\u6682\u65e0\u8be6\u60c5\u3002<\\/p>\"; ";

输入结果:

var data = {"abstract":{"show":"","all":""},"content":{"show":"<\/a>第三个"},"mediafeedback":{"show":""},"extract":{"show":"","all":""}}; var no_txt = "本商品暂无详情。<\/p>"; 

#12


测试:

                string sadf = "var data = {\"abstract\":{\"show\":\"\",\"all\":\"\"},\"content\":{\"show\":\"<\\/a>"
+ "\u7b2c\u4e09\u4e2a"
+ "\"},\"mediafeedback\":{\"show\":\"\"},\"extract\":{\"show\":\"\",\"all\":\"\"}}; var no_txt = \""
+ "\u672c\u5546\u54c1\u6682\u65e0\u8be6\u60c5\u3002<\\/p>\"; ";

输出结果:

var data = {"abstract":{"show":"","all":""},"content":{"show":"<\/a>第三个"},"mediafeedback":{"show":""},"extract":{"show":"","all":""}}; var no_txt = "本商品暂无详情。<\/p>"; 

#13


声明了两个字符串aaa,bbb 用同样的操作进行转换,但是只有bbb转换成功,为何???并且bbb的字符是从aaa里截取出来的,使用的是HtmlAgilityPack存放获取的网页信息。

//第一步 创建http请求 用url实例化HttpWebRequest类
                HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create("http://product.dangdang.com/callback.php?type=detail&product_id=20351565");
                //第二步 发送http请求并接收响应
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                //第三步 获得返回页面的html代码
                Stream myStream = myResponse.GetResponseStream();  //转换为数据流
                HtmlAgilityPack.HtmlDocument myHtmldoc = new HtmlAgilityPack.HtmlDocument();


                StreamReader myReader = new StreamReader(myStream,Encoding.Default);//这里一定要加上编码的类型,不然获取的中文会是乱码
                string testa = myReader.ReadToEnd();   //通过StreamReader类读取流

                byte[] bs = Encoding.Unicode.GetBytes(testa);
                string aaa = Encoding.Unicode.GetString(bs);

                string testb="var data = {\"\"abstract+\"\":{\"show\":\"<a href=\"#\" class=\"layer detail_img\" id=\"abstract_img\"><img src=\"imageslayer_up.gif\" ><\a><div class=\"customize\" id=\"abstract_text\">\u4eae\u70b9\uff1a\u957f\u9500\u4e0d\u8870\u7684Windows\u7f16\u7a0b\u7ecf\u5178<br>\n\u3000\u3000\u6743\u5a01\u529b\u4f5c \u518d\u5ea6\u65b0\u9c9c\u4eae\u76f8<br>\n\u3000\u3000\u540d\u8457\u540d\u8bd1 \u5f70\u663e\u7ecf\u5178\u9b45\u529b<br>\n\u3000\u3000\u6df1\u523b\u5256\u6790\u5e95\u5c42\u5b9e\u73b0\u673a\u7406<br>\n\u3000\u3000\u76f4\u51fbWindows\u7f16";
                string bbb = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(testb));

                //myHtmldoc.Load(myStream,Encoding.GetEncoding("GB2312"));
                myStream.Close();
                return myHtmldoc;

#14


原因在于你获取的时候用的是Encoding.Default,肯定不是Encoding.Unicode,缺省可能是UTF8吧,所以获取来的数据里,\u523b\u5256被当作普通英文和数字,也就是说,\u没有被视作转义字符。
而string testb = "\u523b\u5256"里,\u被认出是转义字符,所以中文会正确显示。
解决方法(参考了*:  http://*.com/questions/1615559/converting-unicode-strings-to-escaped-ascii-string):


                string test1 = Regex.Replace(myReader.ReadToEnd(), @"\\u(?<Value>[a-zA-Z0-9]{4})", 
                    m => {
                        return ((char)int.Parse(m.Groups["Value"].Value, 
                    System.Globalization.NumberStyles.HexNumber)).ToString();});

#1


你这些是unicode?我记得它是16位的

#2


 C# 中  "中文"的 unicode 码 是 "%u4e2d%u6587"

#3


楼上的“中”的Unicode是4E2D "文"是6587 上面的代码 发现没?就是%u的区别。

#4


有人说是JS...像这样的怎么转成我像要的带格式的中文htm啊?

#5


 HttpUtility.HtmlDecode(str,Encoding.Uncode)//试试这样写,反正就这样的格式,怎么搞自己从写下吧

#6


我记得它是8位的

#7


引用 5 楼  的回复:
HttpUtility.HtmlDecode(str,Encoding.Uncode)//试试这样写,反正就这样的格式,怎么搞自己从写下吧


System.Web.HttpUtility.HtmlDecode(string ,TextWriter output);试了 没用

#8



                string ts = "\u7b2c\u4e09\u4e2a\u4e3b\u8981\u5185\u5bb9\u662f\u5173\u4e8e\u8bbe\u5907\u9a71\u52a8\u5b89\u88c5\uff08\u7b2c12\uff5e14\u7ae0\uff09\u3002\u7b2c12\u7ae0\u8bb2\u7cfb\u7edf\u5b89\u88c5\u6a21\u5757\uff0c\u4ece\u603b\u4f53\u89d2\u5ea6\u9610\u8ff0\u7cfb\u7edf\u548c\u8bbe\u5907\u9a71\u52a8\u5982\u4f55\u914d\u5408\u5b8c\u597d\u5730\u8fdb\u884c\u5de5\u4f5c\uff1b\u7b2c13\u7ae0\u8bb2\u8ff0INF\u5b89\u88c5\u6587\u4ef6\u7684\u7ec6\u8282\uff0c\u5305\u62ec\u5404\u4e2a\u57df\u7684\u4f5c\u7528\uff0c\u4ee5\u53ca\u8bf8\u591a\u5b89\u88c5\u6307\u4ee4\u7684\u4f7f\u7528\u3002\u7b2c14\u7ae0\u8bb2\u5982\u4f55\u7f16\u5199\u9a71\u52a8\u5b89\u88c5\u8f6f\u4ef6\u3002"
+ "\u5269\u4f59\u7684\u4e00\u4e9b\u7ae0\u8282\uff0c\u5206\u522b\u662f\u5173\u4e8e\u9a71\u52a8\u5165\u95e8\uff08\u7b2c1\u30012\u7ae0\uff09\u3001Windbg\u8c03\u8bd5\u547d\u4ee4\uff08\u7b2c8\u7ae0\uff09\u3001\u5185\u6838\u540c\u6b65\uff08\u7b2c9\u7ae0\uff09\u7b49\u5185\u5bb9\u3002";
                string ts2 = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(ts));
                textBox1.Text = ts2;



显示结果:

第三个主要内容是关于设备驱动安装(第12~14章)。第12章讲系统安装模块,从总体角度阐述系统和设备驱动如何配合完好地进行工作;第13章讲述INF安装文件的细节,包括各个域的作用,以及诸多安装指令的使用。第14章讲如何编写驱动安装软件。剩余的一些章节,分别是关于驱动入门(第1、2章)、Windbg调试命令(第8章)、内核同步(第9章)等内容。

#9


这个办法我也试过,但是无法全部转换成功,如果把我楼的代码贴上去转就无法转换了,不知道是为什么....

#10


就是说中间截取一段.用Encoding.Unicode.GetString转 可以,但是貌似只要转换的字符串中有非Unicode编码的字符(比如var data = {"abstract":{"show":"","all":""},"content":{"show":"<\/a>等等)就会造成所有的字符转换都不成功。

#11


测试:

                string sadf = "var data = {\"abstract\":{\"show\":\"\",\"all\":\"\"},\"content\":{\"show\":\"<\\/a>"
+ "\u7b2c\u4e09\u4e2a"
+ "\"},\"mediafeedback\":{\"show\":\"\"},\"extract\":{\"show\":\"\",\"all\":\"\"}}; var no_txt = \""
+ "\u672c\u5546\u54c1\u6682\u65e0\u8be6\u60c5\u3002<\\/p>\"; ";

输入结果:

var data = {"abstract":{"show":"","all":""},"content":{"show":"<\/a>第三个"},"mediafeedback":{"show":""},"extract":{"show":"","all":""}}; var no_txt = "本商品暂无详情。<\/p>"; 

#12


测试:

                string sadf = "var data = {\"abstract\":{\"show\":\"\",\"all\":\"\"},\"content\":{\"show\":\"<\\/a>"
+ "\u7b2c\u4e09\u4e2a"
+ "\"},\"mediafeedback\":{\"show\":\"\"},\"extract\":{\"show\":\"\",\"all\":\"\"}}; var no_txt = \""
+ "\u672c\u5546\u54c1\u6682\u65e0\u8be6\u60c5\u3002<\\/p>\"; ";

输出结果:

var data = {"abstract":{"show":"","all":""},"content":{"show":"<\/a>第三个"},"mediafeedback":{"show":""},"extract":{"show":"","all":""}}; var no_txt = "本商品暂无详情。<\/p>"; 

#13


声明了两个字符串aaa,bbb 用同样的操作进行转换,但是只有bbb转换成功,为何???并且bbb的字符是从aaa里截取出来的,使用的是HtmlAgilityPack存放获取的网页信息。

//第一步 创建http请求 用url实例化HttpWebRequest类
                HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create("http://product.dangdang.com/callback.php?type=detail&product_id=20351565");
                //第二步 发送http请求并接收响应
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

                //第三步 获得返回页面的html代码
                Stream myStream = myResponse.GetResponseStream();  //转换为数据流
                HtmlAgilityPack.HtmlDocument myHtmldoc = new HtmlAgilityPack.HtmlDocument();


                StreamReader myReader = new StreamReader(myStream,Encoding.Default);//这里一定要加上编码的类型,不然获取的中文会是乱码
                string testa = myReader.ReadToEnd();   //通过StreamReader类读取流

                byte[] bs = Encoding.Unicode.GetBytes(testa);
                string aaa = Encoding.Unicode.GetString(bs);

                string testb="var data = {\"\"abstract+\"\":{\"show\":\"<a href=\"#\" class=\"layer detail_img\" id=\"abstract_img\"><img src=\"imageslayer_up.gif\" ><\a><div class=\"customize\" id=\"abstract_text\">\u4eae\u70b9\uff1a\u957f\u9500\u4e0d\u8870\u7684Windows\u7f16\u7a0b\u7ecf\u5178<br>\n\u3000\u3000\u6743\u5a01\u529b\u4f5c \u518d\u5ea6\u65b0\u9c9c\u4eae\u76f8<br>\n\u3000\u3000\u540d\u8457\u540d\u8bd1 \u5f70\u663e\u7ecf\u5178\u9b45\u529b<br>\n\u3000\u3000\u6df1\u523b\u5256\u6790\u5e95\u5c42\u5b9e\u73b0\u673a\u7406<br>\n\u3000\u3000\u76f4\u51fbWindows\u7f16";
                string bbb = Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(testb));

                //myHtmldoc.Load(myStream,Encoding.GetEncoding("GB2312"));
                myStream.Close();
                return myHtmldoc;

#14


原因在于你获取的时候用的是Encoding.Default,肯定不是Encoding.Unicode,缺省可能是UTF8吧,所以获取来的数据里,\u523b\u5256被当作普通英文和数字,也就是说,\u没有被视作转义字符。
而string testb = "\u523b\u5256"里,\u被认出是转义字符,所以中文会正确显示。
解决方法(参考了*:  http://*.com/questions/1615559/converting-unicode-strings-to-escaped-ascii-string):


                string test1 = Regex.Replace(myReader.ReadToEnd(), @"\\u(?<Value>[a-zA-Z0-9]{4})", 
                    m => {
                        return ((char)int.Parse(m.Groups["Value"].Value, 
                    System.Globalization.NumberStyles.HexNumber)).ToString();});