最近有特殊应用,要用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、最后,保存修改,重新编译运行程序。
打开程序时,会提示“用户账户控制”来获取管理员权限运行,点击“是”则获取了管理员权限。