关于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/¿ÐÀïÀï´ó±¦±´¶ù
}

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


...全文
293 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分的

110,535

社区成员

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

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

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