将字符串编码为 ISO8859-1 时出现问题
我正在使用此代码将字符串转换为 ISO8859-1
baseurl = "http://myurl.com/mypage.php"
client = New WebClient
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
client.QueryString.Add("usuario", user)
client.QueryString.Add("password", pass)
client.QueryString.Add("ruta", 2)
client.QueryString.Add("remitente", Me.txtRemite.Text)
If Me.chkPRefijo.Checked = True Then
client.QueryString.Add("destinatarios", Me.LookUpEdit1.EditValue & Me.dtsMvl.Tables(0).Rows(x).Item("movil"))
Else
client.QueryString.Add("destinatarios", Me.dtsMvl.Tables(0).Rows(x).Item("movil"))
End If
textoSms = Me.mmTexto.Text
textoSms = System.Web.HttpUtility.UrlEncode(textoSms, System.Text.Encoding.GetEncoding("ISO-8859-1"))
client.QueryString.Add("mensaje", textoSms)
client.QueryString.Add("reporte", 1)
data = client.OpenRead(baseurl)
reader = New StreamReader(data)
s = reader.ReadToEnd()
data.Close()
reader.Close()
但问题是当用户写入此字符时:+
示例:
用户在我的应用程序中写入:
我的应用程序中的价格 80+VAT
编码字符串,该字符串发送给提供商:
价格+80%2bVAT
手机中收到的短信:
价格 80 增值税
< strong>编辑
需要向 URL 传递一些变量。因为我有一个发送短信的程序,并且我需要将变量发送到URL(URL提供者短信系统)。字符串(用户在我的程序中写入的message mobile)必须以编码方式发送(ISO 8859-1)。
例如,PHP 中的这段代码运行良好:
$texto=urlencode($textoOriginal);
此代码返回转换后的字符串:
price+80%2BVAT
EDIT 2
我认为我的代码是错误的。因为如果我发送相同的字符串编码“price+80%2BVAT”,为什么在 VB.NET 代码中无法运行而在 PHP 中运行良好?是相同的编码字符串。
I'm using this code to convert string to ISO8859-1
baseurl = "http://myurl.com/mypage.php"
client = New WebClient
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
client.QueryString.Add("usuario", user)
client.QueryString.Add("password", pass)
client.QueryString.Add("ruta", 2)
client.QueryString.Add("remitente", Me.txtRemite.Text)
If Me.chkPRefijo.Checked = True Then
client.QueryString.Add("destinatarios", Me.LookUpEdit1.EditValue & Me.dtsMvl.Tables(0).Rows(x).Item("movil"))
Else
client.QueryString.Add("destinatarios", Me.dtsMvl.Tables(0).Rows(x).Item("movil"))
End If
textoSms = Me.mmTexto.Text
textoSms = System.Web.HttpUtility.UrlEncode(textoSms, System.Text.Encoding.GetEncoding("ISO-8859-1"))
client.QueryString.Add("mensaje", textoSms)
client.QueryString.Add("reporte", 1)
data = client.OpenRead(baseurl)
reader = New StreamReader(data)
s = reader.ReadToEnd()
data.Close()
reader.Close()
But the problem is when an user writes this caracter: +
EXAMPLE:
user writes in my app:
price 80+VAT
encoded string in my app and this string is sent to provider:
price+80%2bVAT
sms received in the mobile:
price 80 VAT
EDIT
Ineed to pass to URL some variables. Because I have a program to send sms, And I need to send variables to URL (URL provider SMS system). The string (message mobile that the user writes in my program) must be sent encoded (ISO 8859-1).
For example, this code in PHP runs fine:
$texto=urlencode($textoOriginal);
This code returns this string converted:
price+80%2BVAT
EDIT 2
I think that my code is wrong. Because if I send the same string encoded "price+80%2BVAT", Why in VB.NET code not runs and in PHP runs fine? Is the same encoded string.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我看到您正在将字符串传递给查询字符串,因此这就是您要使用的方法。
当您请求返回查询字符串时,您需要做的是使用
System.Web.HttpUtility.UrlDecode
基本上,您执行以下
这是我运行的一个测试,似乎有效。
这是我的结果
编辑:
看到您的编辑后,请尝试下面的操作...
而不是使用您此处的内容...
I see that you're passing the string to the querystring, so this is the method that you want to use.
What you need to do when you request the querystring back is use
System.Web.HttpUtility.UrlDecode
Basically you do the following
Here's a test that I ran that seemed to work.
And here's my results
EDIT:
After seeing your edit, Try this bit below...
Instead of using what you have here...
这是 URL 编码的一部分 -
+
表示 URL 中的空格。换句话说,如果您实际上想要 URL 编码,那么这是正确的行为。如果您不这样做,请准确解释您想要做什么。
That's part of URL encoding -
+
means a space in a URL.In other words, this is correct behaviour if you actually want URL encoding. If you don't, please explain exactly what you're trying to do.