Кодирование бинарного в юникод - PullRequest
0 голосов
/ 01 октября 2019

У меня есть байтовый массив, который мне нужно сохранить в столбце nvarchar DB. A nvarchar занимает 2 байта. Какова оптимальная кодировка?

В идеале я бы сохранял N байтов в nvarchar длины N / 2, но меня беспокоит недопустимая последовательность Юникода.

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Наиболее оптимальным решением было бы хранить двоичный файл в двоичном столбце. То есть вы имеете в виду наиболее оптимальное кодирование в рамках этого субоптимального сценария?

Просто перейдите на base64, это безопасно.

Если вы не можете контролировать входные байты, вы неизбежно столкнетесь с проблемами кодирования рано или поздно.

0 голосов
/ 01 октября 2019

Обычно Base64 - хороший способ, но вы можете использовать только кодовые точки Unicode.

Кодовые точки Unicode идут от 0 до 10FFFF, но вы можете легко и эффективно кодировать 2 с половиной байта в кодовую точку Unicode,В зависимости от ваших требований вы можете сместить все кодовые точки на 128, чтобы у вас был ASCII для границ (и вам не нужно беспокоиться о байте 0, и при этом у вас достаточно кодовых точек для 20-битных двоичных данных (на кодовую точку). [Или, возможно, просто экранируйте 0 как 0x10000]

Это универсально, для Unicode (так универсально, Unicode). Если вы знаете кодировку (например, UTF-8, вы можете выбрать другую кодировку).

...