Возврат каретки (/ r) отсутствует при кодировании и декодировании строки с использованием c # - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть следующая строка:

This is the string to
test carriage return
using c#

Приведенная выше строка имеет два возврата каретки в конце строк.Я должен кодировать эту строку для передачи в службу WCF, а затем декодировать строку для дальнейшего процесса.

//TO ENCODE
            byte[] bytes = Encoding.Default.GetBytes(rawstring);
            string encodedStr = Encoding.UTF8.GetString(bytes);


//TO DECODE
            byte[] rawUtf8EncodedData = Encoding.Default.GetBytes(encodedstring);
            string decodedStr =  Encoding.UTF8.GetString(rawUtf8EncodedData);

После кодирования я получаю следующую строку:

This is the string to\ntest carriage return\nusing c#

После декодирования я получаю следующую строку:

This is the string to\ntest carriage return\nusing c#

Проблема в том, что мне нужна кареткавернитесь назад по какой-то причине, а не \ n в моей строке после декодирования.Как мне этого добиться?Приведенная выше строка предназначена только для иллюстрации и в реальной строке будет много возвратов каретки и символов

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Это неверно:

byte[] bytes = Encoding.Default.GetBytes(rawstring);
string encodedStr = Encoding.UTF8.GetString(bytes);

Первая строка получает байты, используя кодировку по умолчанию.В .Net Core это UTF-8, и вы, вероятно, в порядке, но в Windows это системная кодовая страница ОС, которая может быть что угодно .

Затем вторая строка кода обрабатывает эти байты, как будто они уже в формате UTF-8, независимо от того, что вы на самом деле получили.Это может работать для большого количества строк, но в конечном итоге это может провалиться эффектно.Более того, результатом по-прежнему является строка .Net, которая является внутренней кодировкой Unicode (UTF-16) ... так что в итоге вы по-прежнему получаете UTF-16, , а не UTF-8 .

Если вам нужно отправить строку UTF-8 сетевой службе, получите байты UTF-8, используя Encoding.UTF8.GetBytes(), и отправьте байты, как если бы они были строкой.

0 голосов
/ 27 ноября 2018

Замена \ n на \ r \ n работает нормально

...