.net 将字符串编码为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.

我正在使用此代码将字符串转换为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+增值税

我的应用程序中的编码字符串,此字符串将发送给提供商:

价格+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

基本上你要做以下几点

  • URL对原始文本进行编码
  • 将它传递给查询字符串
  • 请求查询字符串
  • URL对其进行解码以获取原始文本
  • 这是我运行的一个测试,似乎有效

    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"))