Разница в кодировке для потребителей и потребителей Kafka - PullRequest
0 голосов
/ 16 июня 2020

Я использовал старую кафку, где я использовал фрагмент кода ниже, где mEncoding может быть utf-7, utf-8, unicode et c.

new Consumer<Ignore, string>(mConfig, null, new StringDeserializer(mEncoding)))

Я обновляю свою kafka до версии 1.4.0.

Я обнаружил, что Consumer заменен на ConsumerBuilder, где доступен метод SetValueDeserializer, но он принимает только utf-8 ( Десериализаторы.Utf8). Могу ли я отправить другую кодировку?

1 Ответ

0 голосов
/ 07 июля 2020

Вы должны просто реализовать свой собственный десериализатор. Это может выглядеть примерно так:

public class MyValueDeserializer : IDeserializer<string>
{
    private readonly Encoding _encoding;

    public MyValueDeserializer(Encoding encoding)
    {
        _encoding = encoding;
    }

    public string Deserialize(ReadOnlySpan<byte> data, bool isNull, SerializationContext context)
    {
        if (isNull)
        {
            return null;
        }

        var array = data.ToArray();

        using var stream = new MemoryStream(array);
        using var sr = new StreamReader(stream, _encoding);

        return sr.ReadToEnd();
    }
}

Тогда вы можете использовать SetValueDeserializer(new MyValueDeserializer(Encoding.UTF7))

...