Проблема кодирования строки в ISO8859-1 - PullRequest
2 голосов
/ 18 февраля 2010

Я использую этот код для преобразования строки в 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 НДС


EDIT

Требуется передать на URL некоторые переменные. Потому что у меня есть программа для отправки смс, и мне нужно отправить переменные на URL (система SMS провайдера URL). Строка ( сообщение моб. , которое пользователь пишет в моей программе) должна быть отправлена ​​в кодированном виде (ISO 8859-1).

Например, этот код в PHP работает нормально:

$texto=urlencode($textoOriginal);

Этот код возвращает преобразованную строку:

цена + 80% 2BVAT


РЕДАКТИРОВАТЬ 2

Я думаю, что мой код неверен. Потому что, если я посылаю ту же строку в кодировке "цена + 80% 2BVAT", почему в VB.NET код не запускается, а в PHP работает нормально? Это та же самая закодированная строка.

Ответы [ 2 ]

3 голосов
/ 18 февраля 2010

Я вижу, что вы передаете строку в строку запроса, так что это метод, который вы хотите использовать.

То, что вам нужно сделать, когда вы запрашиваете строку запроса назад, это использовать System.Web.HttpUtility.UrlDecode

В основном вы делаете следующее:

  1. UrlEncode исходного текста
  2. Передача его в QueryString
  3. Запрос QueryString
  4. 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

А вот мои результаты

Исходная строка: это моя строка с символом +.
закодированная строка: это + является + моя + строка + с символом +% 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"))
2 голосов
/ 18 февраля 2010

Это часть кодировки URL - + означает пробел в URL.

Другими словами, это правильное поведение, если вы на самом деле хотите кодирование URL. Если нет, пожалуйста, объясните, что именно вы пытаетесь сделать.

...