webBrowser使用方法收藏

本文档记录了在C/S架构的Winform应用中,使用WebBrowser组件进行网页交互时遇到的两个主要问题及其解决方案。一是如何处理UTF8编码导致的乱码问题,通过使用StreamReader从DocumentStream中读取并指定UTF-8编码来解决。二是解决WebBrowser无法正确识别JSON数据的问题,通过修改注册表或者代码方式注册JSON的MIME类型来实现JSON数据的正常读取。此外,对于64位平台的应用,需要设置为64位运行,并确保程序以管理员权限启动。

最近有特殊应用,要用C/S模式去调WEB方式的单点登录

于是就是winform项目中使用了webBrowser来模拟登录,遇到了以下问题,特记录一下

1、解决UTF8乱码问题

当得到的数据编码是UTF8时,就会出现乱码,因为webBrowser是使用GB2312编码的

解决方法:在确认获取到数据的情况下,使用数据流方式,从webBrowser中获取数据,进行编码
System.IO.StreamReader getReader = new System.IO.StreamReader(this.webBrowser1.DocumentStream, System.Text.Encoding.GetEncoding("utf-8"));
string gethtml = getReader.ReadToEnd();//得到经utf-8编码后的数据

2、解决JSON数据无法读取,需要打开文件下载

网上有很多解决办法,但写得都有一些问题

(1)注册表直接导入

按以下内容编写一个.reg文件,然后导入注册表,注意一定要存为ANSI格式的,否则会出错

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]

"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"

"Encoding"=dword:00080000

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]

"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"

"encoding"=dword:00080000

(2)代码写入

 //注册表解决JSON数据自动读取
                   

//注册表解决JSON数据自动读取
                    RegistryKey rgk = Registry.ClassesRoot;

                    //Registry.ClassesRoot.OpenSubKey(@"MIME\Database\Content Type", true);
                    try
                    {
                        
                        RegistryKey rgkOpen = rgk.CreateSubKey(@"MIME\\Database\\Content Type\\application/json");

                    }
                    catch (Exception e5) {
                        MessageBox.Show(e5.Message);
                    }
                    try
                    {
                        RegistryKey rgkOpen = rgk.OpenSubKey(@"MIME\\Database\\Content Type\\application/json", true);
                        rgkOpen.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}");
                        rgkOpen.SetValue("Encoding", 524288, RegistryValueKind.DWord);
                        string info = rgkOpen.GetValue("CLSID").ToString();
                        rgkOpen.Flush();
                        rgkOpen.Close();

                    }
                    catch(Exception e6)
                    {
                        MessageBox.Show(e6.Message);
                    }
                    try
                    {
                        rgk.Flush(); //刷新注册表  
                        rgk.Close();
                    }
                    catch
                    {

                    }

                    rgk = Registry.ClassesRoot;

                    try
                    {
                        RegistryKey rgkOpen = rgk.CreateSubKey(@"MIME\\Database\\Content Type\\text/json");

                    }
                    catch (Exception e6)
                    {
                        MessageBox.Show(e6.Message);
                    }
                    try
                    {
                        RegistryKey rgkOpen = rgk.OpenSubKey(@"MIME\\Database\\Content Type\\text/json", true);
                        rgkOpen.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}");
                        rgkOpen.SetValue("encoding", 524288, RegistryValueKind.DWord);
                        string info = rgkOpen.GetValue("CLSID").ToString();
                        rgkOpen.Flush();
                        rgkOpen.Close();

                    }
                    catch (Exception e6)
                    {
                        MessageBox.Show(e6.Message);
                    }

                    try
                    {
                       
                    rgk.Flush(); //刷新注册表  
                    rgk.Close();
                    }
                    catch
                    {

                    }

需要注意的是,在生成里,如果是64位平台的话,请设置为64位

(3)使用代码方式写注册表时,需要配置应用的管理员权限,如下

——————————————————————————————

s1、 在Visual Studio 中–解决方案资源管理器–右键项目名称–属性,找到“安全性”选项,
在这里插入图片描述
s2、勾选“启用ClickOnce安全设置”,
在这里插入图片描述
s3、这时,在项目下面会多出一个“app.manifest”的文件,选中它,并找到代码段,将其改为:,
在这里插入图片描述
打开:
在这里插入图片描述
将上图部分修改为:
在这里插入图片描述
s4、改正后,不要急于重新编译生成,再次打开“属性–安全性”界面,

将“启用ClickOnce安全设置”前面的勾去掉后再编译运行。 不然程序会报错无法运行。
在这里插入图片描述

s5、最后,保存修改,重新编译运行程序。

打开程序时,会提示“用户账户控制”来获取管理员权限运行,点击“是”则获取了管理员权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值