最近有特殊应用,要用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、最后,保存修改,重新编译运行程序。
打开程序时,会提示“用户账户控制”来获取管理员权限运行,点击“是”则获取了管理员权限。
本文档记录了在C/S架构的Winform应用中,使用WebBrowser组件进行网页交互时遇到的两个主要问题及其解决方案。一是如何处理UTF8编码导致的乱码问题,通过使用StreamReader从DocumentStream中读取并指定UTF-8编码来解决。二是解决WebBrowser无法正确识别JSON数据的问题,通过修改注册表或者代码方式注册JSON的MIME类型来实现JSON数据的正常读取。此外,对于64位平台的应用,需要设置为64位运行,并确保程序以管理员权限启动。
1万+

被折叠的 条评论
为什么被折叠?



