Por vezes quando trabalhamos com strings podemos nos deparar com alguns casos insólitos.
Por exemplo, na abordagem que falei NEventStore System.IO.FileNotFoundException in System.Private.CoreLib.dll como recebemos um array de bytes do payload e para trabalhar com o nosso evento precisamos converter esse array de bytes para uma string e dessa forma podemos usar o Deserialize para um objeto nosso.
Se formos converter utilizando o Encoding ASCII usualmente acontece depararmo-nos no início da string com ??? para resolver podemos facilmente utilizar algo como:
const char trash = '???'; var json = Encoding.UTF8.GetString(commit.Payload).Replace(trash.ToString(), string.Empty);
Porém se precisas, por causa de alguns caracteres, de utilizar UTF-8, então é comum que te depares com um <0xFEFF>, tipo:

Se inspecionares pelo visual studio não vais perceber nada de anormal na string, pois o <0xFEFF> não é exibido, porém se copiares o valor e colocares, por exemplo no Sublime Text 3, aí vais ver algo como a imagem acima.
Esse <0xFEFF> nada mais é que o BOM (Byte Order Mark), que é um uso particular do caractere Unicode especial, U + FEFF BYTE ORDER MARK, que tem uma aparência como um número mágico no início de um texto para sinalizar várias coisas para o programa que for ler o documento ou, no nosso caso a string.
E, no caso de UTF-8 a representação do BOM é a sequência hexadecimal 0xEF, 0xBB e 0xBF.
O mesmo acontece se, com o NEventSore fores ler o Payload na Base de Dados, fazes algo como:
CAST(Payload AS VARCHAR(MAX))
E ele te retorna no início uns caracteres estranhos  que também está relacionado com o UTF-8 mas na sua representação de bytes como caracteres CP1252
A solução para limpar essa string pode passar por:
const char trash = '\xfeff'; var json = Encoding.UTF8.GetString(commit.Payload).Replace(trash.ToString(), string.Empty);
E é isso, espero que tenha ajudado.