Вопрос о том, как Frameworx выполняет метод Encoding.Convert - PullRequest
1 голос
/ 12 сентября 2011

В последнее время я пытаюсь прочитать о том, как все работает со строками и кодировками.

У меня такой вопрос, метод:

public static byte[] Convert(
Encoding srcEncoding,
Encoding dstEncoding,
byte[] bytes
)

Что на самом деле происходит за кулисами, использует ли он StringBuilder для проверки каждого символа и затем заменяет их в соответствии с указанной кодировкой или как?

1 Ответ

0 голосов
/ 12 сентября 2011

Я бы ожидал, что оно будет эффективно :

string text = srcEncoding.GetString(bytes);
return destEncoding.GetBytes(text);

Теперь он может сделать это более эффективным способом памяти, чем это, - но для этого ему необходимо декодировать исходные двоичные данные и снова кодировать их как двоичные данные в другой кодировке.

Обратите внимание, что выполнение кодирования по буквам не всегда работает - например, одна байтовая последовательность UTF-8 может декодироваться в одну кодовую точку Unicode, представленную в качестве суррогатной пары кодовых единиц UTF-16 ( char значений). Использование Encoder и декодера pair would allow "chunks" of data to be encoded/decoded at a time, removing the need for the whole text data to be in memory at one time... possibly writing to a MemoryStream` или чего-либо подобного для хранения закодированных данных.

...