UTF-8の4バイト文字は、Unicodeの拡張領域。 で、この領域の文字はNodeでは未対応なのだけど、クライアント側で「数値参照」に加工しちゃえば、何とかなるんじゃないか?と思った。 「JavaScript コードポイント」でググれば見つかるこのエントリ内のコードと組み合わせる。 // toNumericCharacterReference for SMP(Supplementary Multilingual Plane) String.prototype.toNCRef = function() { return this.replace(/([\uD800-\uDBFF][\uDC00-\uDFFF])/g, function($0, $1){ return '&#x' + String($1).toCodePoints()[0].toString(16) + ';'; }) };