簡単便利なxml2jsは、パーサーにsax-jsが、ジェネレーターにxmlbuilderが使われている。指定された文字コードさえ適切なら、パーサー側は何もせずに絵文字あたりをパース可能なので問題ない。しかし、ジェネレーター側では適切なオプションが立ってないので、絵文字を含むXMLを作ろうとすると例外で落ちる。
xmlbuilderでは絵文字辺りを扱うためには、create()
関数の第4引数でallowSurrogateChars
オプションを有効にしてやる必要がある。
var xml = require('xmlbuilder').create(
'root',
{
encoding: 'UTF-8'
},
{},
{
allowSurrogateChars: true
}
).ele('child', '\uD83D\uDC76');
console.log(xml);
これで落ちない。しかし、xml2jsではこのオプションを有効にできないので、自前でジェネレーター関数を作り直す必要がある。
今はxml2jsのBuilder()
をパクってお茶を濁しているけど、どうにかしないと今後辛そう。プル・リクエストを投げたいけど、CoffeeScriptという難敵が。