4 votes

Message GCM reçu affiche un texte brouillé

J'ai un Servlet déployé sur Google App Engine, qui joue le rôle d'envoyer un message en diffusion à GCM. Les clients Android recevront ce message en diffusion depuis GCM. Le Servlet étend BaseServlet avec l'extrait suivant.

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  // Lors de la réception d'une requête de diffusion GCM, envoyer un message à GCM
  Builder mb = new Message.Builder();
  mb.addData("message", "Le message à envoyer");
  Message message = mb.build();
  sender.sendNoRetry(message, regIds);
  ...
}

Quand "le message à envoyer" est en anglais, tout va bien. Mais si "le message à envoyer" est remplacé par une autre langue comme le chinois, le client Android recevra une chaîne de texte illisible. Sur le client Android, j'utilise une classe étend GCMBaseIntentService pour traiter la diffusion GCM.

@Override
protected void onMessage(Context context, Intent intent) {

        String message = "";
        message = intent.getStringExtra("message")!=null ? intent.getStringExtra("message") : "";
        doNotify(message);
}

J'ai essayé de ré-encoder le message mais cela ne fonctionne pas.

message = new String(message.getBytes("ISO-8859-1"), "UTF-8");

Avez-vous une idée sur le problème ? J'ai besoin de votre aide, merci.

8voto

wtsang02 Points 6993

Essayez URLEncoder

mb.addData("message", URLEncoder.encode("世界","UTF-8");

une autre option:

mb.addData("message", new StringEntity("世界", "UTF-8");

Après avoir examiné le code source de GCM : com.google.android.gcm.server.Sender , il utilise HttpPost comme json, et Java utilise UTF-16 en interne donc avant de poster, vous devrez l'encoder correctement.
Et comme le commentaire l'a dit, décodez la chaîne du client

String yourAwesomeUnicodeString=URLDecoder.decode(intent.getStringExtra("message"),"UTF-8");

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