2017-09-03 157 views
1

我需要使用Sinch API發送帶有阿拉伯文字的短信。我的短信息包含英文,阿拉伯文和數字。Sinch阿拉伯語消息

我試過

  1. 我已閱讀文檔Sinch但他們沒有提供關於如何使用UTF-16BE和頭 編碼而發送這條消息的任何 詳細的文檔。
  2. 我也聯繫了他們的支持團隊,但他們沒有提供詳細的解決方案。而他們提到的任何東西都不起作用。

下面是我試圖

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. 

響應我已經RECD

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

正如意見中的要求的代碼,下面是英文的工作示例只:

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請求

HttpClient.sendHttpPostRequest(url, messageBody, headers); 

成功的電話後,我得到消息ID響應來自Sinch

+0

你試過把它編碼到utf-8中嗎 – lionscribe

+0

是的,我試過了,它沒有奏效,甚至支持sinch的團隊要求我用UTF-16BE解析消息。另外,從文檔中也可以找到下面這行:「阿拉伯文,中文,韓文,日文或西裏爾字母語言(如烏克蘭文,塞爾維亞文,保加利亞文等)中的字符必須使用16位UCS -2字符編碼「。參考 - https://www.sinch.com/docs/sms/ –

+0

它應該確實發送爲utf8 – cjensen

回答

1

的問題是,無論你的字符串的內部編碼爲(這在Java中始終是UTF-16 ),HttpClient.sendHttpPostRequest可能將其作爲UTF-8發送。
由於DefaultHttpClient已過時,我們將使用HttpURLConnection以正確的方式執行此操作。您可能想要了解如何使用認證方面的HttpURLConnection Documentation

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(); 
    } 
} 

如果不工作,你也應該嘗試UTF-16BE或UTF-16LE沒有字節順序標記。

+0

我這樣做,它不會工作 - 字符串messageBody =新字符串(jsonObject.toString()。getBytes(),「UTF-16BE」); –

+0

另外,以上嘗試,但仍然無法正常工作。 –

+0

@AvtarGuleria您可以發佈至少在文本中沒有阿拉伯文的情況下工作的代碼嗎?用一個工作示例更新您的問題。這樣我們可以嘗試逐步完成這個工作。 – lionscribe