.net 将字符串编码为ISO8859-1时出现问题
我正在使用此代码将字符串转换为ISO8859-1.net 将字符串编码为ISO8859-1时出现问题,.net,vb.net,encoding,character-encoding,iso-8859-1,.net,Vb.net,Encoding,Character Encoding,Iso 8859 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.
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+增值税 我的应用程序中的编码字符串,此字符串将发送给提供商: 价格+80%增值税 手机接收到的短信: 价格80增值税
编辑 我需要向URL传递一些变量。因为我有一个程序来发送短信,我需要发送变量到URL(URL提供商短信系统)。字符串(用户在我的程序中写入的移动消息)必须进行编码发送(ISO 8859-1) 例如,PHP中的这段代码运行良好:
$texto=urlencode($textoOriginal);
此代码返回转换后的字符串:
价格+80%增值税
编辑2
我认为我的代码是错误的。因为如果我发送相同的字符串编码“price+80%2BVAT”,为什么在VB.NET代码中不运行而在PHP中运行良好?是相同的编码字符串 这是URL编码的一部分-
+
表示URL中的空格
换句话说,如果您确实想要URL编码,这是正确的行为。如果没有,请准确解释您正在尝试执行的操作。我看到您正在将字符串传递给querystring,因此这就是您想要使用的方法 请求返回查询字符串时需要执行的操作是使用
System.Web.HttpUtility.UrlDecode
基本上你要做以下几点
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim str As String = "This is My STRING with a + symbol."
Dim encoded As String = Server.UrlEncode(str)
Dim decoded As String = Server.UrlDecode(encoded)
Dim sb As New StringBuilder
sb.Append("Original String: ")
sb.Append(str)
sb.Append("</br>")
sb.Append("Encoded String: ")
sb.Append(Replace(encoded, "%2b", "%2B"))
sb.Append("</br>")
sb.Append("Decoded String: ")
sb.Append(decoded)
Response.Write(sb.ToString)
End Sub
而不是使用你这里的东西
textoSms = Me.mmTexto.Text
textoSms = System.Web.HttpUtility.UrlEncode(textoSms, System.Text.Encoding.GetEncoding("ISO-8859-1"))
这是URLEncode的默认行为,我只需要将编码后的文本发送到我的SMS供应商的系统中,那么他们是否没有对其进行适当的解密?可能会问他们希望您如何发送“+”符号。这是一个很长的问题,但是您是否尝试在没有ISO说明符的情况下发送encode命令
System.Web.HttpUtility.UrlEncode(smsMessage)
如果我在未指定ISO的情况下发送它,则消息接收不正确。但是,如果我指定了ISO 8859-1,则消息可以正常接收,除了这个字符+SMS提供商只对我说消息必须编码在ISO8859-1中。例如,在PHP中,如果您这样做:“$mensaje=urlencode($mensaje);”它运行良好(并不是特别为了编码字符+)。但我仍然没有设法在VB.NET中编写代码
textoSms = Me.mmTexto.Text
textoSms = System.Web.HttpUtility.UrlEncode(textoSms, System.Text.Encoding.GetEncoding("ISO-8859-1"))