2017-09-03 4 views
1

Ich muss SMS mit Sinch API mit arabischem Text senden. Meine SMS enthält die englische, arabische und numerische Nummer.Sinch arabische Nachricht

Was habe ich versucht,

  1. ich für Sinch lesen Dokumentation haben, aber sie lieferten keine detaillierte Dokumentation darüber, wie UTF-16 BE verwenden und Header Codierung, während diese Nachricht zu senden.
  2. Ich kontaktierte auch ihr Support-Team, aber sie haben auch keine detaillierte Lösung dafür bereitgestellt. Und was immer sie erwähnten, hat nicht funktioniert.

Unten finden Sie den Code, den ich

String arabicFormattedMessage = "Some English Text \n\n"+"رجى الاتصال بالامتثال التجاري وحماية المستهلك (ككب) من دائرة التنمية الاقتصادية في 12345678 لمزيد من التفاصيل، إذا لم يتم الاتصال في غضون 5 أيام عمل."; 
jsonObject.put("message", arabicFormattedMessage); 

String messageBody = new String(jsonObject.toString().getBytes(),"UTF-16BE"); 
String contentTypeHeader = "application/json; charset=UTF-16BE"; 

headers.put("authorization", base64AuthHeader); 
headers.put("content-type", contentTypeHeader); 
headers.put("x-timestamp", timeStampHeader); 

//headers.put("encoding", "UTF-16BE"); Tried with and without this, but still not working. 

Antwort versucht haben, habe ich

Sinch responseCode: 400 
Sinch Response: message object is invalid. toNumber object is invalid. 

Wie in den Kommentaren Gewünscht, unten ist das Arbeitsbeispiel mit englischem Erh Nur :

JSONObject jsonObject = new JSONObject(); 
String formattedMessage = "some english message"; 
jsonObject.put("message", formattedMessage); 
final String messageBody = jsonObject.toString(); 

final String base64AuthHeader = "basic" + " " + base64AppDetails; 
String contentTypeHeader = "application/json; charset=UTF-8"; 
final String timeStampHeader = DateUtil.getFormattedTimeString(new Date()); 

headers.put("authorization", base64AuthHeader); 
headers.put("content-type", contentTypeHeader); 
headers.put("x-timestamp", timeStampHeader); 

HTTP-POST-Anfrage

HttpClient.sendHttpPostRequest(url, messageBody, headers); 

Nach erfolgreichem Anruf erhalte ich Nachrichten-ID als Antwort von Sinch

+0

Haben Sie versucht, es in utf-8 – lionscribe

+0

zu codieren Ja, ich habe versucht, es hat nicht funktioniert und sogar Unterstützung Team von sinch bat mich, die Nachricht in UTF-16BE zu analysieren. Auch in der Dokumentation finden Sie die folgende Zeile: "Zeichen in Sprachen wie Arabisch, Chinesisch, Koreanisch, Japanisch oder Kyrillisch (z. B. Ukrainisch, Serbisch, Bulgarisch usw.) müssen mit dem 16-Bit-UCS codiert werden -2 Zeichencodierung. "Referenz-https://www.sinch.com/docs/sms/ –

+0

Es sollte wirklich als utf8 – cjensen

Antwort

1

Das Problem ist, dass das, was die Zeichenfolge der interne Codierung ist (was in Java ist immer UTF-16), Sendet HttpClient.sendHttpPostRequest wahrscheinlich als UTF-8.
Da DefaultHttpClient Veraltet ist, werden wir es mit HttpURLConnection richtig machen. Möglicherweise möchten Sie die HttpURLConnection Documentation sehen, wie es in Bezug auf die Authentifizierung verwendet werden sollte.

String arabicFormattedMessage = "Some English Text \n\n"+"رجى الاتصال بالامتثال التجاري وحماية المستهلك (ككب) من دائرة التنمية الاقتصادية في 12345678 لمزيد من التفاصيل، إذا لم يتم الاتصال في غضون 5 أيام عمل."; 
jsonObject.put("message", arabicFormattedMessage); 

URL url = new URL ("http://..."); 
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); 
try { 
    urlConn.setDoInput (true); 
    urlConn.setDoOutput (true); 
    urlConn.setRequestProperty("Content-Type","application/json; charset=UTF-16"); 
    urlConn.connect(); 

    DataOutputStream out = new DataOutputStream(urlConn.getOutputStream()); 
    out.writeBytes(URLEncoder.encode(jsonObject.toString(),"UTF-16")); 
    out.flush(); 
    out.close(); 

    int responseCode = urlConnection.getResponseCode(); 
    InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
    readStream(in); 
    } finally { 
     urlConnection.disconnect(); 
    } 
} 

Wenn es nicht funktioniert, sollten Sie auch UTF-16 BE oder UTF-16LE ohne Bytereihenfolgemarkierung versuchen.

+0

Ich mache das, wird es nicht funktionieren-String messageBody = new String (jsonObject.toString(). GetBytes(), "UTF-16BE"); –

+0

Auch oben versucht, aber immer noch nicht funktioniert. –

+0

@AvtarGuleria Kannst du Code schreiben, der mindestens funktioniert, wenn kein Arabisch im Text ist? Aktualisieren Sie Ihre Frage anhand eines Arbeitsbeispiels. So können wir versuchen, dies Schritt für Schritt zu erledigen. – lionscribe