4 votes

Encodage d'une chaîne de caractères persane à l'aide de C#

Je développe une application SMS en utilisant C# pour la banque qui envoie des alertes de transaction, c'est-à-dire des transactions ATM, au client par le biais de la passerelle SMS. L'application fonctionne bien, le seul problème est l'encodage du texte persan, il n'est pas encodé correctement.

Voici la méthode qui permet d'encoder le texte persan au format UTF-16.

public static string Endian2UTF(string s)        
{

     Encoding ui = Encoding.BigEndianUnicode;              
     Encoding u8 = Encoding.UTF8;              
     string str = u8.GetString(ui.GetBytes(s));              
     return str;          
}

Certains caractères ne sont pas encodés correctement, le message sur l'appareil mobile ressemble à ce qui suit

500.00 .

Le problème ne concerne que certains personnages, comme vous le voyez ci-dessus. Pour votre information, il n'y a pas de problème avec la chaîne anglaise.

2voto

Finalement, j'ai trouvé le problème. Dans la bibliothèque, le texte était codé de manière incorrecte. J'ai donc suivi la trace en utilisant le point d'arrêt du débogueur et j'ai trouvé le cas racine. Il encodait le message en UTF8, une fois que je l'ai changé en BigEndianUnicode. Cela a fonctionné comme un charme. Voici le code. Vous devez appliquer les changements ci-dessous dans la méthode SendSms du fichier SMPPClient.cs.

if (dataCoding == 8)
{
   //data = Encoding.UTF8.GetBytes(text);
     data = Encoding.BigEndianUnicode.GetBytes(text);
}
else
{
    data = Encoding.ASCII.GetBytes(text);
}

Une autre modification à apporter si le SMS est toujours envoyé comme un déchet. Commentez la partie qui encode le texte en UTF dans SMMPClient.cs.

if (dataCoding == 8)
{
    //text = Tools.Endian2UTF(text);
      maxLength = 70;
}

J'espère que cela pourra aider tous ceux qui utilisent la bibliothèque EasySMPP pour envoyer des SMS à leurs clients.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X