Como faço para capturar erros de decodificação de utf-8 em node.js?

Acabei de descobrir que o nó (testado: v0.8.23, atual git: v0.11.3-pre)ignora quaisquer erros de decodificação no manuseio Buffer, silenciosamente substituindo qualquer caractere não utf8 por'\ufffd' (o Unicode REPLACEMENT CHARACTER) em vez de lançar uma exceção sobre a entrada não-utf8. Como consequência,fs.readFile, process.stdin.setEncoding e os amigos mascaram uma grande classe de erros de entrada incorretos para você.

Exemplo que não falha, mas realmente deveria:

> notValidUTF8 = new Buffer([ 128 ], 'binary')
<Buffer 80>
> decodedAsUTF8 = notValidUTF8.toString('utf8') // no exception thrown here!
'�'
> decodedAsUTF8 === '\ufffd'
true

'\ufffd' é um personagem perfeitamente válido que pode ocorrer no utf8 legal (como a sequênciaef bf bd), por isso não é trivial para monkey-patch no tratamento de erros com base nisso aparecer no resultado.

Cavando um pouco mais fundo, parece que isso decorre do nó apenas adiando para as strings da v8 e que essas, por sua vez, têm o comportamento acima, v8 não tendo nenhum mundo externo cheio de dados codificados de forma estrangeira.

Existem módulos de nó ou de outra forma que me permitem capturar erros de decodificação utf-8, preferencialmente com contexto sobre onde o erro foi descoberto na cadeia de entrada ou no buffer?

questionAnswers(3)

yourAnswerToTheQuestion