11

EXIFextractorというライブラリを使用して、画像からメタデータ情報を抽出しています。このライブラリの一部は、System.Drawing.Imaging.PropertyItemを使用してすべてのハードワークを実行しています。Image DetailsなどのPropertyItemの一部のデータは、Microsoftのドキュメントに従って、byte[]に格納されたASCII文字列としてフェッチされます。

私の問題は、国際的な文字(å、ä、öなど)が削除され、疑問符に置き換えられることです。コードをデバッグすると、byte[]がUTF-8の表現であることがわかります。

byte []をUTF8文字列として解析したいのですが、プロセスで情報を失うことなくこれを行うにはどうすればよいですか?

前もって感謝します!


アップデート:

コードからスニペットを提供するように求められました。

最初のスニペットは、私が使用するクラス、つまりAsimGoheerによって作成された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()); 

私はまた、データから私の貴重なå、ä、öを取得する他のいくつかの方法を試しましたが、何もうまくいかないようです。私はハンス・パッサントが以下の彼の答えで彼の結論について正しいと思い始めています。

4

4 に答える 4

40
string yourText = System.Text.Encoding.UTF8.GetString(yourByteArray);
于 2010-08-04T13:53:17.880 に答える
4

GetStringオブジェクトのメソッドを使用しEncoding.UTF8ます。

于 2010-08-04T13:53:07.037 に答える
2

はい、これは画像を作成したアプリまたはカメラの問題です。EXIF標準はテキストをひどくサポートしているため、ASCIIでエンコードする必要があります。それは、写真家が英語を話すときにのみうまくいきます。画像をエンコードしたソフトウェアがこの要件を無視していることは間違いありません。これはPropertyItemクラスも行っていることであり、システムのデフォルトのコードページを想定するMarshal.StringToHGlobalAnsi()を使用して文字列をbyte[]にエンコードします。

これに対する明確な修正はありません。写真がマシンから離れすぎていると、文字化けが発生します。

于 2010-08-04T15:10:20.997 に答える
1

たぶん、別のエンコーディングを試すことができますか?UTF16、Unicode?そもそも正しくエンコードされているかどうかわからない場合は、別のexifリーダーでexifメタデータを表示してみてください。

于 2010-08-04T14:44:16.057 に答える