Son simplemente diferentes esquemas para representar caracteres Unicode.
Ambos son de longitud variable - UTF-16 utiliza 2 bytes para todos los caracteres en el plano multilingüe básico (BMP) que contiene la mayoría de los caracteres de uso común.
UTF-8 usa entre 1 y 3 bytes para caracteres en BMP, hasta 4 para caracteres en el rango Unicode actual de U + 0000 a U + 1FFFFF, y es extensible hasta U + 7FFFFFFF si eso ocurre alguna vez es necesario ... pero, en particular, todos los caracteres ASCII están representados en un solo byte cada uno.
A los efectos de un resumen de mensaje, no importa cuál de estos elija, siempre y cuando todos los que intenten recrear el resumen utilicen la misma opción.
Consulte this page para más información sobre UTF-8 y Unicode.
(Tenga en cuenta que todos los caracteres de Java son UTF-16 puntos de código dentro de la BMP;. Para representar los caracteres anteriores U + FFFF que necesita para utilizar los pares suplentes en Java)
jon skeet tiene un buen artículo sobre la codificación .... http: //csharpindepth.com/Articles/General/Unicode.aspx –