C#: Преобразование байта [] к UTF8 закодированная строка

Я пользуюсь библиотекой под названием EXIFextractor для извлечения информации о метаданных из изображений. Этот lib частично использует Систему. Рисование. Обработка изображений. PropertyItem, чтобы сделать всю тяжелую работу. Некоторые данные в PropertyItem, такие как Детали Изображения и так далее, выбираются как строка ASCII, сохраненная в байте [] согласно документации Microsoft.

Моя проблема состоит в том, что международные символы (å, ä, ö, и так далее) отбрасываются и заменяются вопросительными знаками. Когда я отлаживаю код, очевидно, что байт [] является представлением UTF-8.

Я хотел бы проанализировать байт [] как UTF8-строка, как я могу сделать это, не освобождая информации в процессе?

Заранее спасибо!


Обновление:

Меня попросили обеспечить отрывок из моего кода:

Первый отрывок от класса, который я использую, а именно, EXIFextractor.cs, записанный Asim Goheer

foreach( System.Drawing.Imaging.PropertyItem p in parr )
{
 string v = ""; 

                // ...

 else if( p.Type == 0x2 )
 {
  // string     
  v = ascii.GetString(p.Value);
 }

И это - мой код, где я стараюсь изо всех сил обрабатывать результаты вышеупомянутого.

                try {
  EXIFextractor exif = new EXIFextractor(ref bmp, "");
  object o;
                    if ((o = exif["Image Description"]) != null)
                        MediaFile.Description = Tools.UTF8Encode(o.ToString()); 

Я также попробовал несколько других способов получить мой драгоценный å, ä, ö от данных, но ничто, кажется, не добивается цели. Я начинаю думать, что Hans Passant прав относительно своих заключений в его ответе ниже.

9
задан dotmartin 5 August 2010 в 09:38
поделиться

4 ответа

string yourText = System.Text.Encoding.UTF8.GetString(yourByteArray);
37
ответ дан 4 December 2019 в 06:09
поделиться

Используйте метод GetString для объекта Encoding.UTF8 .

4
ответ дан 4 December 2019 в 06:09
поделиться

Может, попробуете другую кодировку? UTF16, Unicode? Если вы не уверены, правильно ли он кодирует, попробуйте сначала просмотреть метаданные exif с помощью другого считывателя exif.

1
ответ дан 4 December 2019 в 06:09
поделиться

Да, это проблема приложения или камеры, которая создала изображение. Стандарт EXIF ужасно поддерживает текст, его приходится кодировать в ASCII. Это хорошо работает только тогда, когда фотограф говорит по-английски. Несомненно, программное обеспечение, закодировавшее изображение, игнорирует это требование. Именно это делает и класс PropertyItem, он кодирует строку в byte[] с помощью Marshal.StringToHGlobalAnsi(), которая предполагает кодовую страницу системы по умолчанию.

Очевидного исправления этого нет, вы получите mojibake, если фотография была сделана слишком далеко от вашей машины.

2
ответ дан 4 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: