2010-02-18 7 views
2

J'utilise ce code pour convertir la chaîne à ISO8859-1Problème chaîne de codage 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() 

Mais le problème est quand un utilisateur écrit ce caracter: +


Exemple:

utilisateur écrit dans mon application:

prix 80 + TVA

chaîne encodée dans mon application et cette chaîne est envoyée au fournisseur:

prix + 80% 2bVAT

sms reçu dans le mobile:

prix 80 TVA


EDIT

Ineed pour passer à l'URL des variables. Parce que j'ai un programme pour envoyer des sms, et j'ai besoin d'envoyer des variables à l'URL (système SMS du fournisseur d'URL). La chaîne (message mobile que l'utilisateur écrit dans mon programme) doit être encodée (ISO 8859-1).

Par exemple, le code en PHP fonctionne très bien:

$texto=urlencode($textoOriginal); 

Ce code renvoie cette chaîne convertie:

prix + 80% 2BVAT


EDIT 2

Je pense que mon code est faux. Car si j'envoie la même chaîne encodée "price + 80% 2BVAT", pourquoi le code VB.NET ne s'exécute-t-il pas et en PHP s'exécute bien? Est-ce la même chaîne codée.

+1

qui est le comportement par défaut de UrlEncode –

Répondre

2

Cela fait partie du codage d'URL - + signifie un espace dans une URL.

En d'autres termes, ce comportement est correct si vous réellement souhaitez codage d'URL. Si vous ne le faites pas, veuillez expliquer exactement ce que vous essayez de faire.

+0

J'ai modifié mon premier message. – aco

3

Je vois que vous passez la chaîne à la chaîne de requête, c'est donc la méthode que vous voulez utiliser.

Ce que vous devez faire quand vous demandez la chaîne de requête de retour est d'utiliser System.Web.HttpUtility.UrlDecode

Fondamentalement, vous effectuez les opérations suivantes

  1. UrlEncode le texte original
  2. passer à la QueryString
  3. Demander au QueryString
  4. UrlDécodez-le pour récupérer le texte d'origine.

Voici un test que j'ai exécuté qui semblait fonctionner.

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 

Et voici mes résultats

Chaîne d'origine: Ceci est mon STRING avec un symbole +.
Chaîne codée: Ce + est + Ma + STRING + avec + un symbole +% 2B +.
Chaîne décodée: Ceci est ma chaîne avec un symbole +.

EDIT:
Après avoir vu votre modifier, Essayez ce bit ci-dessous ...

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

Au lieu d'utiliser ce que vous avez ici ...

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

Je n'ai qu'à envoyer le texte codifié au système de mon fournisseur de SMS. – aco

+0

Alors ne sont-ils pas décrypter de façon appropriée? Peut-être demandez-leur comment ils veulent que vous envoyiez un symbole "+". –

+0

Il s'agit d'un tir long total, mais avez-vous essayé d'envoyer la commande encoder sans le spécificateur ISO? 'System.Web.HttpUtility.UrlEncode (smsMessage)' –