繁体   English   中英

C#:将byte []转换为UTF8编码的字符串

[英]C#: Converting byte[] to UTF8 encoded string

我正在使用一个名为EXIFextractor的库来从图像中提取元数据信息。 这个lib部分是使用System.Drawing.Imaging.PropertyItem来完成所有艰苦的工作。 根据Microsoft文档,PropertyItem中的某些数据(如Image Details等)将作为存储在byte []中的ASCII字符串提取。

我的问题是国际字符(å,ä,ö等等)被删除并被问号所取代。 当我调试代码时,很明显byte []是UTF-8的表示。

我想将byte []解析为UTF8字符串,如何在不丢失过程中的任何信息的情况下执行此操作?

提前致谢!


更新:

我被要求提供我的代码片段:

第一个片段是从类我使用,即通过阿西姆Goheer写的EXIFextractor.cs

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在下面的答案中对他的结论是正确的。

string yourText = System.Text.Encoding.UTF8.GetString(yourByteArray);

Encoding.UTF8对象上使用GetString方法。

是的,这是源自图像的应用程序或相机的问题。 EXIF标准对文本有很强的支持,它必须用ASCII编码。 当摄影师说英语时,这种情况一直很好。 毫无疑问,编码图像的软件忽略了这一要求。 这也是PropertyItem类正在执行的操作,它使用Marshal.StringToHGlobalAnsi()将字符串编码为byte [],该字符串采用系统的默认代码页。

对此没有明显的解决方法,当照片离你的机器太远时,你会得到mojibake。

也许你可以试试另一种编码? UTF16,Unicode? 如果您不确定它是否正确编码,请尝试使用另一个exif阅读器查看exif元数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM