Tôi đang sử dụng thư viện có tên EXIFextractor để trích xuất thông tin siêu dữ liệu từ hình ảnh. Phần lib này đang sử dụng System.Drawing.Imaging.PropertyItem để thực hiện tất cả công việc khó khăn. Một số dữ liệu trong PropertyItem, chẳng hạn như Image Details etcetera, được tìm nạp dưới dạng chuỗi ASCII được lưu trữ trong một byte [] theo tài liệu của Microsoft.C#: Chuyển đổi byte [] thành chuỗi được mã hóa UTF8
Vấn đề của tôi là các ký tự quốc tế (å, ä, ö, etcetera) bị loại bỏ và được thay thế bằng dấu chấm hỏi. Khi tôi gỡ lỗi mã, rõ ràng là byte [] là biểu diễn của một UTF-8.
Tôi muốn phân tích cú pháp byte [] dưới dạng chuỗi UTF8, làm cách nào tôi có thể thực hiện việc này mà không mất bất kỳ thông tin nào trong quá trình này?
Cảm ơn trước!
Cập nhật:
Tôi đã được yêu cầu cung cấp một đoạn mã từ mã của tôi:
Đoạn đầu tiên là từ lớp tôi sử dụng, cụ thể là EXIFextractor.cs được viết bởi Asim Goheer
foreach(System.Drawing.Imaging.PropertyItem p in parr)
{
string v = "";
// ...
else if(p.Type == 0x2)
{
// string
v = ascii.GetString(p.Value);
}
Và đây là mã của tôi nơi tôi cố gắng hết sức để xử lý t anh ấy kết quả ở trên.
try {
EXIFextractor exif = new EXIFextractor(ref bmp, "");
object o;
if ((o = exif["Image Description"]) != null)
MediaFile.Description = Tools.UTF8Encode(o.ToString());
Tôi cũng đã thử một số cách khác để nhận dữ liệu quý giá của tôi, nhưng không có gì có thể làm được. Tôi bắt đầu nghĩ Hans Passant đúng về những kết luận của anh ta trong câu trả lời dưới đây.
Nếu thông tin được đọc bằng cách sử dụng mã hóa ASCII, mọi ký tự không phải ASCII sẽ không được đọc chính xác như một hệ quả. Việc đọc các ký tự này bằng cách mã hóa và sau đó ghi vào một mảng byte không đúng. Bạn có thể liên kết đến tài liệu nêu rõ trường hợp này không? –
Đây là, nếu tôi được phép đăng một siêu liên kết khác :) http://msdn.microsoft.com/en-us/library/system.drawing.imaging.propertyitem.type.aspx – dotmartin