Измените кодировку на UTF8 для данных, хранящихся в base64string - PullRequest
0 голосов
/ 04 июля 2018

Мне нужно обработать файлы CSV, которые хранятся в виде строк bsae64. Я никогда не знаю, в каком формате они были созданы (обычно это будет ANSI или UTF-8). Я изо всех сил пытался добиться чего-то полезного, тем не менее, я получаю испорченные символы, когда я тестирую свой код в файле CSV, который был сохранен в ANSI. Код для чтения - это просто двухстрочный код:

byte[] dataToDecode = Convert.FromBase64String(base64Content); 
string csvContentInUTF8 = Encoding.UTF8.GetString(dataToDecode2);

У меня нет доступа к коду, который сохраняет файлы.

Пример строки во входном CSV:

;;; superÆ / æ Ø / ø и даже Å / å Тема ;; Джон; Доу ;;;; john@doe.com ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;

что я получаю после декодирования (вторая строка кода)

;;; super / / oraz / Тема ;; Джон; Доу ;;;; john@doe.com ;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;

следующий этот вопрос Я попытался изменить код на чтение скандинавской кодировки, поэтому:

string csvContentInUTF8x = Encoding.GetEncoding("iso-8859-1").GetString(dataToDecode);

Вывод:

;;; super� / � � / � oraz � / � Тема ;; Джон; Доу ;;;; john@doe.com ;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Выглядит точно так же для Encoding.Default

1 Ответ

0 голосов
/ 04 июля 2018

Если то, что вы написали правильно, текст был поврежден до записи в файл CSV.

Теперь ... Encoding.GetEncoding("iso-8859-1") - идентичная кодировка, которая не выполняет переопределение. Его 256 символов отображаются 1: 1 на первые 256 (0-255) символов Юникода.

;;;super�/� �/� oraz �/� Topic;;John;Doe;;;;john@doe.com

Вы видите, что � повторяется шесть раз? Обычно каждый раз он должен быть разным, потому что вам нужно шесть разных символов (Æ / æ, Ø / ø, Å / å). Но здесь они всегда одинаковы. И это потому, что в UTF-8 � используется символ замены Юникод , который используется, когда символ не может быть закодирован. Так что ошибка уже присутствует в вашем dataToDecode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...