关于webbrowser 如何取得有汉字的网址

vovo2000 2009-02-03 04:54:31
baidu的注册是可以用汉字的

http://zhangmen.baidu.com/activeuser.htm
右边的历史最活跃用户,大部分都是用汉字的用户名

①在用户名链接上面右键,可以看见连接是这样子的
http://zhangmen.baidu.com/¿ÐÀïÀï´ó±¦±´¶ù

②查看源代码的话,是这样子的
<a href="/%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9" target="_blank">这里是汉字</a>

③鼠标放在上面,状态栏显示的网址是这样子的
http://zhangmen.baidu.com/%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9

④点击链接的话,地址栏的连接也是
http://zhangmen.baidu.com/%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9

我在webbrowser的 Navigating 事件里面取得的网址
webBrowser_1_Navigating(object sender, WebBrowserNavigatingEventArgs e){
e.Url.ToString();取得的网址是情况①的样子:http://zhangmen.baidu.com/¿ÐÀïÀï´ó±¦±´¶ù
}

我怎么样才能取得情况③④那样子的网址呢。


...全文
334 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgke 2009-02-06
  • 打赏
  • 举报
回复
判断下不可以吗?


private void button1_Click(object sender, EventArgs e)
{
//string _Value1 ="http://www.abcd.com/汉字/abc/又是汉字";
string _Value1 = "http://www.abcd.com/abc/abc/仅仅这里是汉字";
string _Value = EncoderUrl(_Value1);

MessageBox.Show(_Value.ToString());
_Value = DecoderUrl(_Value);
MessageBox.Show(_Value.ToString());
}
private string EncoderUrl(string p_Value)
{
string _ReturnUrl = "";
for (int i = 0; i != p_Value.Length; i++)
{
if ((int)p_Value[i] > 255)
{
_ReturnUrl += EncoderText(p_Value[i].ToString(), System.Text.Encoding.UTF8);
}
else
{
_ReturnUrl += p_Value[i].ToString();
}
}
return _ReturnUrl;
}

private string DecoderUrl(string p_Value)
{
string[] _TempValue = p_Value.Split('/');
string _ReturnUrl="";
for (int i = 0; i != _TempValue.Length; i++)
{
if (_TempValue[i].IndexOf("%") == 0)
{
_ReturnUrl += DecoderText(_TempValue[i],System.Text.Encoding.UTF8) + "/";
}
else
{
_ReturnUrl += _TempValue[i] + "/";
}
}
return _ReturnUrl;
}

/// <summary>
/// 转换"%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9"为字符
/// </summary>
/// <param name="p_Value">"%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9"</param>
/// <param name="p_TextEncoding">编码方式</param>
/// <returns>字符</returns>
public static string DecoderText(string p_Value, System.Text.Encoding p_TextEncoding)
{
System.IO.MemoryStream _Memory = new System.IO.MemoryStream(1);
string[] _Temp = p_Value.Split('%');
for (int i = 0; i != _Temp.Length; i++)
{
try
{
_Memory.WriteByte(Convert.ToByte(_Temp[i], 16));
}
catch
{
}
}
byte[] _TextByte = new byte[_Memory.Length];
_Memory.Position = 0;
_Memory.Read(_TextByte, 0, _TextByte.Length);
_Memory.Dispose();
return p_TextEncoding.GetString(_TextByte);
}
/// <summary>
/// 转换字符为"%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9"
/// </summary>
/// <param name="p_Value">字符</param>
/// <param name="p_TextEncoding">编码方式</param>
/// <returns>"%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9"</returns>
public static string EncoderText(string p_Value, System.Text.Encoding p_TextEncoding)
{
string _ReturnValue = BitConverter.ToString(p_TextEncoding.GetBytes(p_Value), 0);
_ReturnValue = "%" + _ReturnValue.Replace("-", "%");
return _ReturnValue;
}
vovo2000 2009-02-06
  • 打赏
  • 举报
回复
希望各位高手,出手相救。
vovo2000 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zgke 的回复:]
判断下不可以吗?

[/Quote]

谢谢。非常感谢。


另外
有没有办法能直接取到webbrowser编码后的地址(状态栏显示的地址)?
因为网页的编码不是固定的,可能uft8,也可能是其他。。。。

注意,不要直接取状态栏的文本。

谁能够解答,我再开帖给100分。
vovo2000 2009-02-04
  • 打赏
  • 举报
回复
谢谢大家支持。

不好意思,我没有说明白。

我的情况是
①不是征求编码解码的方法
②不是网页,不要javascript的方法


我要的是
①在webbrowser中,怎么取得编码后,像这样的网址:
http://zhangmen.baidu.com/%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9
 而不是这样的 
http://zhangmen.baidu.com/¿ÐÀïÀï´ó±¦±´¶ù



回复:zgke
我的情况是不知道一串网址中,并不知道哪一部分是文字,哪一部分是英文
有可能这样http://www.abcd.com/汉字/abc/又是汉字
也有可能http://www.abcd.com/abc/abc/仅仅这里是汉字
还有各种情况
vovo2000 2009-02-04
  • 打赏
  • 举报
回复
加分 继续ing
zgke 2009-02-03
  • 打赏
  • 举报
回复
private void Form1_Load(object sender, EventArgs e)
{


string _Value="%BF%D0%C0%EF%C0%EF%B4%F3%B1%A6%B1%B4%B6%F9";

string _Temp = DecoderText(_Value);
MessageBox.Show(_Temp);

string _Temp2 = EncoderText(_Temp);

MessageBox.Show(_Temp2 + "\r\n" + _Value);

}

public static string DecoderText(string _Value)
{
System.IO.MemoryStream _Memory = new System.IO.MemoryStream(1);
string[] _Temp = _Value.Split('%');
for (int i = 0; i != _Temp.Length; i++)
{
try
{
_Memory.WriteByte(Convert.ToByte(_Temp[i], 16));
}
catch
{
}
}
byte[] _TextByte =new byte[_Memory.Length];
_Memory.Position = 0;
_Memory.Read(_TextByte, 0, _TextByte.Length);
return System.Text.Encoding.Default.GetString(_TextByte);
}

public static string EncoderText(string _Value)
{
string _ReturnValue = BitConverter.ToString(System.Text.Encoding.Default.GetBytes(_Value), 0);
_ReturnValue ="%"+ _ReturnValue.Replace("-", "%");
return _ReturnValue;
}

转换下看看~~
lianhui1122 2009-02-03
  • 打赏
  • 举报
回复
<script language="javascript">
var a = encodeURI("Http://www.csdn.net?id=わらやまはなた|这里是汉字");
alert(a);
var b = decodeURI(a);
alert(b)
</script>

vovo2000 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lianhui1122 的回复:]
<script language="javascript">
var a = encodeURI("这里是汉字");
alert(a);
var b = decodeURI(a);
alert(b)
</script>

给个例子测试下,别忘了加100分哈,呵呵呵
[/Quote]


谢谢你的支持,不过我要的C# webbrowser的
lianhui1122 2009-02-03
  • 打赏
  • 举报
回复
encodeURI("")
你可以把整个网址都放进去,他只对该编码的地方编码,“Http://www.csdn.net?id=”这一块是不变的好吧?!!
<script language="javascript">
var a = encodeURI("Http://www.csdn.net?id=这里是汉字");
alert(a);
var b = decodeURI(a);
alert(b)
</script>
vovo2000 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lianhui1122 的回复:]
encodeURI()
用这个方法对汉字编码下,关系到编码问题,汉字都是要处理的
不然很容易出错
[/Quote]
如果单独给我几个汉字,当然可以这样编码。
但是webbrowser里面你取得的是一整串的网址,不知道网址里面那部分是汉字(因为不是针对特定网站,事前知道,可以截取),
而且有可能是中文编码,有可能是日文编码,还有可能是UFT等等。

我觉得既然IE状态栏可以显示正确的网址,应该有什么办法可以取得这个网址的吧。
网上搜索,说可以通过WebBrowser1_StatusTextChange(ByVal Text As String)
取得状态栏的文字,
但是有些网站,状态栏的文字都用javascript改成其他东西,这个时候就不行了。


期待高手解答。
lianhui1122 2009-02-03
  • 打赏
  • 举报
回复
<script language="javascript">
var a = encodeURI("这里是汉字");
alert(a);
var b = decodeURI(a);
alert(b)
</script>

给个例子测试下,别忘了加100分哈,呵呵呵
lianhui1122 2009-02-03
  • 打赏
  • 举报
回复
encodeURI()
用这个方法对汉字编码下,关系到编码问题,汉字都是要处理的
不然很容易出错
vovo2000 2009-02-03
  • 打赏
  • 举报
回复
不好意思,分给少了,因为一天之后才能加分,
结贴的时候我会加到100分的
内容概要:本文围绕“光伏-储能-数据中心”系统的容量优化配置展开研究,旨在通过构建数学模型并结合Matlab编程实现,对园区内光伏发电、储能设备与数据中心算力负荷之间的多能互补关系进行协同优化。研究综合考虑可再生能源出力的波动性、储能系统的充放电特性以及数据中心的动态用电需求与算力调度特性,建立以最小化综合成本、降低碳排放强度、提升能源自给率等为目标的多目标优化模型,并采用先进的智能优化算法(如粒子群、灰狼、鲸鱼等)进行求解,从而确定光伏装机容量与储能系统配置的最优方案。文中提供了完整的Matlab代码实现流程,涵盖数据预处理、模型构建、算法求解与结果可视化全过程,属于综合能源系统与信息基础设施深度融合的前沿交叉课题。; 适合人群:具备电力系统、能源工程、自动化或计算机等相关专业背景,熟悉Matlab编程与基本优化算法原理,从事新能源利用、绿色数据中心、综合能源系统规划与低碳调度等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握光伏-储能-数据中心耦合系统的建模思路与多能流协同机制;② 学习基于Matlab的多目标容量优化配置方法与智能算法应用技巧;③ 为工业园区、数字经济园区及绿色数据中心的能源系统规划、节能减排与可持续运行提供科学决策依据和技术解决方案。; 阅读建议:建议结合所提供的Matlab代码,深入理解目标函数设计、约束条件设定及算法实现细节,可通过调整负荷参数、改变气候数据、引入新的优化目标或约束条件等方式进行拓展性实验,以深化对系统特性的认知并提升实际科研与工程应用能力。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧