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("-", "");
}
Encoding.BigEndianEncoding
是UTF-16(而不是UCS-2)。
编辑
这里是NodeJS版本,它使用Buffer类中内置的UCS2转换器: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'));
参考以下Stack Overflow回答的思路:
谢谢!
终于找到答案了:)
这些字符([,],|)被编码为两个字符,例如
[
被编码为 1B1E
(转义字符和<符号的组合)
]
被编码为 1B20
(转义字符和>符号的组合)
所以每当我遇到这些字符时,我就用相应的值替换它,然后使用7位编码。 运行良好...
所以我的 [ 的编码字符串是
> AT+CMGS=15
> 0001000C911989890878800000021B1E
关于"[hello]"的内容
> AT+CMGS=21
> 0001000C911989890878800000091B1EBACC66BF373E