2012-10-25 9 views
2

According to Twilio,他們現在在其RESTful SMS界面中支持Unicode字符。然而,我不清楚我如何利用JavaScript中的這個優勢(這是在Node中)。如何在Twilio SMS請求中指定一個unicode消息正文?

當我使用西班牙語翻譯發送短信(默認爲UTF-8)時,郵件將在收件人電話中被切成三條消息。我猜測,根本原因是我需要在請求中發送一個unicode消息體。

如何將Javascript字符串轉換爲unicode?我試圖逐個字符地翻譯...

function toUnicode(theString) { 
    var unicodeString = ''; 
    for (var i=0; i < theString.length; i++) { 
    var theUnicode = theString.charCodeAt(i).toString(16).toUpperCase(); 
    while (theUnicode.length < 4) { 
     theUnicode = '0' + theUnicode; 
    } 
    theUnicode = '\\u' + theUnicode; 
    unicodeString += theUnicode; 
    } 
    return unicodeString; 
} 

...但是,它產生的消息體被解釋爲長於160個字符的限制。

回答

0

如果您要將消息作爲Unicode發送,則需要16位編碼。 SMS中16位編碼的限制是70個字符。這是因爲SMS信令協議限制爲140個八比特組,如果使用7比特編碼,則將其轉換爲正常的160個字符。這是SMS協議的限制,而不是Twilio。我不確定你的問題是如何以Unicode發送,或者爲什麼它分解我的消息。

+0

你說得對,有兩個問題埋在那裏。你的編碼答案有助於闡明一些東西 - 我用於轉換爲unicode的代碼片段需要34個字符併產生204個字符的unicode。 – Greg

+0

由於您使用的是Javascript,因此用於Unicode的約定是前綴「/ u」後面跟着一個代表該字符的4位十六進制值,所以在Javascript中將使用6個字符來表示1個Unicode字符(34 x 6 = 204) 。但是,一旦它處於Twilio API中,Unicode對於每個字符應該仍然是16位。顯示消息時,Twilio API是否正確處理Javascript中的Unicode字符?它是否打破了70個字符的信息? –

+0

Twilio API似乎並未將其識別爲Unicode - 這就好像字符先被計數一樣,因爲它由於長度而被API拒絕。 – Greg

相關問題