Кодировать не ascii символы в C # .NET - PullRequest
6 голосов
/ 23 ноября 2011

Я хочу добавить пользовательский заголовок к электронным письмам, которые отправляет мое приложение.Имя заголовка может содержать только символы ASCII, но для значения и пользователей потенциально могут вводить символы UTF-8, и я должен их кодировать в base64.Также я должен декодировать их обратно в UTF-8, чтобы показать их пользователю в пользовательском интерфейсе.

Какой лучший способ сделать это?

Ответы [ 2 ]

10 голосов
/ 23 ноября 2011

Чтобы преобразовать строку .net в базу 64, используя UTF8 в качестве базовой кодировки:

string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(text));

И для обратного процесса:

string text = Encoding.UTF8.GetString(Convert.FromBase64String(base64));

Вполне возможно пропустить шаг UTF8. Однако UTF8 обычно приводит к меньшей полезной нагрузке, чем UTF16, и поэтому я бы рекомендовал использовать UTF8 в качестве базовой кодировки.


Я не уверен, что вы имеете в виду, когда говорите, что пользователь может вводить символы UTF8. .NET Framework использует UTF16 в качестве кодировки рабочей строки. Строки, которые вы используете в .net, всегда кодируются с помощью UTF16. Возможно, вы просто имеете в виду, что текст может содержать не-ASCII символы.

1 голос
/ 23 ноября 2011

Для кодирования строки:

var someUtf8Str = "ఠఠfoobarఠఠ";
var bytes = Encoding.UTF8.GetBytes(someUtf8Str);
var asBase64Str = Convert.ToBase64String(bytes);

Для ее декодирования:

var bytes = Convert.FromBase64String(asBase64Str);
var asUtf8Str = Encoding.UTF8.GetString(bytes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...