2010-02-18 2 views
2

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

Но проблема в том, когда пользователь пишет этот carácter: +


Пример:

пользователя пишет в моем приложении:

цена 80 + НДС

строка в кодировке в моем приложении, и эта строка передается поставщику:

цена + 80% 2bVAT

смс получил в мобильный:

цена 80 НДС


EDIT

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

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

$texto=urlencode($textoOriginal); 

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

цена + 80% 2BVAT


EDIT 2

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

+1

, что является поведение по умолчанию UrlEncode –

ответ

2

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

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

+0

Я отредактировал свое первое сообщение. – aco

3

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

Что вам нужно сделать, когда вы запрашиваете строки запроса Спинка использовать 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 

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

Оригинал Строка: Это моя строка с символом +.
Кодированная строка: это + + My + STRING + с + + + + 2 + +.
Декодированная строка: это моя STRING с символом +.

EDIT:
После просмотра правку, Попробуйте немного ниже ...

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

Мне нужно отправить текст, кодифицированный в систему моего поставщика SMS. – aco

+0

Разве они не соответствующим образом расшифровывают его? Возможно, спросите их, как они хотят, чтобы вы отправили символ «+». –

+0

Это общий длинный снимок, но вы попробовали отправить команду кодирования без указателя ISO? 'System.Web.HttpUtility.UrlEncode (smsMessage)' –