このページ(セクション Unicode SMS メッセージの送信を参照) によると、8 ビットのエンコーディングは実際には UCS-2 です。
完全な実装を提供するには、nodejs について十分な知識がありませんが、ここに .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("-", "");
}
この投稿Encoding.BigEndianEncoding
によると、 UTF-16 (UCS-2 ではない)であるため、私のコードはサロゲート ペアとしてエンコードされた文字に対しては機能しないことに注意してください。
編集
Buffer クラスに組み込みの UCS2 コンバーターを使用する NodeJS バージョンを次に示します。
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'));
これらのSOの回答に触発されました: