2012-05-01 37 views
7

Tôi đang viết ứng dụng trong nodej để gửi và nhận tin nhắn trong chế độ PDU.I sử dụng modem wavecom GSM (mã hóa 7 bit) để gửi sms. Nó cũng hỗ trợ lược đồ mã hóa 8 bit (AT + CSMP = 1,167,0,8).Hỗ trợ ký tự [và] ở chế độ PDU

Tôi có thể gửi ký tự số alpha đúng cách.But tôi không thể gửi một số ký tự như ([,], | v.v.).

Đây chuỗi:

AT+CMGS=14  
0001030C911989890878800004015B 

chữ String: [

Nhưng tôi nhận được một số nhân vật rác. Bất kỳ ý tưởng?

Và cách gửi sms nhiều phần. Tôi có tham khảo thisthis nhưng tôi không nhận được kết quả mong muốn. bất cứ ai có thể đề xuất 8-bit (7-bit encoding scheme) chương trình mã hóa văn bản? Hãy giúp tôi ...

+0

có bạn đã cố gắng thoát khỏi nhân vật chưa? –

Trả lời

2

Cảm ơn,

Cuối cùng tôi nhận được câu trả lời :)

này nhân vật ([,], |) là mã hóa như hai nhân vật như

[ là mã hóa như 1B1E (Combination thoát ký tự và ký hiệu <)

] được mã hóa thành 1B20 (Kết hợp ký tự thoát và> ký)

Vì vậy, bất cứ khi nào tôi thích các ký tự như vậy, tôi đã thay thế nó bằng giá trị tương ứng sau đó tôi sử dụng mã hóa 7 bit. Nó hoạt động tốt ...

Vì vậy, chuỗi mã hóa của tôi cho [là

> AT+CMGS=15 
> 0001000C911989890878800000021B1E 

Và cho "[chào]"

> AT+CMGS=21 
> 0001000C911989890878800000091B1EBACC66BF373E 

Cảm ơn một lần nữa ..

3

Theo this page (xem phần Gửi tin nhắn SMS Unicode), mã hóa 8 bit thực tế là UCS-2.

Tôi không biết đủ về nodejs để cung cấp cho bạn thực hiện đầy đủ, nhưng đây là một mẫu NET:

string EncodeSmsText(string text) 
{ 
    // Convert input string to a sequence of bytes in BigEndian UCS-2 encoding 
    // 'Hi' -> [0, 72, 0, 105] 
    var bytes = Encoding.BigEndianUnicode.GetBytes(text); 

    // Encode bytes to hex representation 
    // [0, 72, 0, 105] -> '00480069' 
    return BitConverter.ToString(bytes).Replace("-", ""); 
} 

Xin lưu ý rằng theo this post mã của tôi sẽ không làm việc cho các ký tự mã hóa như thay thế các cặp, bởi vì Encoding.BigEndianEncoding là UTF-16 (không phải UCS-2).

Sửa

Đây là NodeJS phiên bản có sử dụng được xây dựng trong UCS2 chuyển đổi trong lớp đệm:

function swapBytes(buffer) { 
    var l = buffer.length; 
    if (l & 0x01) { 
     throw new Error('Buffer length must be even'); 
    } 
    for (var i = 0; i < l; i += 2) { 
     var a = buffer[i]; 
     buffer[i] = buffer[i+1]; 
     buffer[i+1] = a; 
    } 
    return buffer; 
} 

function encodeSmsText(input) { 
    var ucs2le = new Buffer(input, 'ucs2'); 
    var ucs2be = swapBytes(ucs2le); 
    return ucs2be.toString('hex'); 

} 

console.log(encodeSmsText('Hi')); 

Lấy cảm hứng từ những câu trả lời SO:

+0

Cảm ơn bạn, nó hoạt động hoàn hảo với Gammy SMS gateway. – Fulup