0
点赞
收藏
分享

微信扫一扫

webBrowser使用方法收藏

西风白羽 2022-04-13 阅读 74
c#

最近有特殊应用,要用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数据自动读取
                    RegistryKey rgk = Registry.ClassesRoot;

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

                    }
                    catch (Exception e5) {
                        MessageBox.Show(e5.Message);
                    }
                    try
                    {
                        rgk.OpenSubKey(@"MIME\Database\Content Type\application/json", true);
                        rgk.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}");
                        rgk.SetValue("Encoding", 524288, RegistryValueKind.DWord);
                        
                    }
                    catch(Exception e6)
                    {
                        MessageBox.Show(e6.Message);
                    }
                    try
                    {
                        rgk.CreateSubKey(@"MIME\Database\Content Type\text/json");

                    }
                    catch (Exception e6)
                    {
                        MessageBox.Show(e6.Message);
                    }
                    try
                    {
                        rgk.OpenSubKey(@"MIME\Database\Content Type\text/json", true);
                        rgk.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}");
                        rgk.SetValue("Encoding", 524288, RegistryValueKind.DWord);

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

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

                    }

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

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

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

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

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

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

举报

相关推荐

0 条评论