问题编码为ISO8859-1的字符串

时间:2010-02-18 15:35:00

标签: .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.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%2bVAT

手机中收到的短信:

价格80增值税


修改

无需向URL传递一些变量。因为我有一个发送短信的程序,而我需要将变量发送到URL(URL提供商SMS系统)。用户在程序中写入的字符串( message mobile )必须以编码方式发送(ISO 8859-1)。

例如,PHP中的这段代码运行良好:

$texto=urlencode($textoOriginal);

此代码返回此字符串已转换:

价+ 80%2BVAT


编辑2

我认为我的代码错了。因为如果我发送相同的字符串编码“价格+ 80%2BVAT”,为什么在VB.NET代码中运行并且在PHP中运行正常?是相同的编码字符串。

2 个答案:

答案 0 :(得分:3)

我看到你将字符串传递给查询字符串,所以这是你想要使用的方法。

请求查询字符串后,您需要执行的操作是使用System.Web.HttpUtility.UrlDecode

基本上你做了以下

  1. UrlEncode原始文字
  2. 将其传递给QueryString
  3. 请求QueryString
  4. Url对其进行解码以获取原始文本。
  5. 这是我跑的测试似乎有效。

    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
    

    这是我的结果

      

    原始字符串:这是带有+符号的我的字符串   编码字符串:此+为+我+ + STRING + + + + + + 2B +符号   解码字符串:这是带有+符号的我的字符串。

    修改
    看到你的编辑后,请尝试以下这一点......

    textoSms = Replace(System.Web.HttpUtility.UrlEncode(Me.mmTexto.Text, System.Text.Encoding.GetEncoding("ISO-8859-1")), "%2b", "%2B")
    

    而不是使用你在这里的东西......

        textoSms = Me.mmTexto.Text
        textoSms = System.Web.HttpUtility.UrlEncode(textoSms, System.Text.Encoding.GetEncoding("ISO-8859-1"))
    

答案 1 :(得分:2)

这是网址编码的一部分 - +表示网址中的空格。

换句话说,如果您实际想要URL编码,这是正确的行为。如果您不这样做,请准确说明您要做的事情。