Index: wp-admin/includes/image.php
===================================================================
--- wp-admin/includes/image.php	(revision 19592)
+++ wp-admin/includes/image.php	(working copy)
@@ -236,15 +236,31 @@
 				$meta['title'] = utf8_encode( trim( $iptc['2#005'][0] ) );
 
 			if ( ! empty( $iptc['2#120'][0] ) ) { // description / legacy caption
-				$caption = utf8_encode( trim( $iptc['2#120'][0] ) );
-				if ( empty( $meta['title'] ) ) {
-					// Assume the title is stored in 2:120 if it's short.
-					if ( strlen( $caption ) < 80 )
-						$meta['title'] = $caption;
-					else
+				
+				// Check mimetype using fileinfo, if available
+				$str = $iptc['2#120'][0];
+				$mime_type = '';
+				if ( extension_loaded('fileinfo') ) { 
+					$finfo = new finfo(); 
+					$mime_type = $finfo->buffer( $str, FILEINFO_MIME );
+					unset( $finfo );
+
+				// If fileinfo isn't available, check the caption for printable characters
+				} elseif ( ctype_print($str) ) { 
+					$mime_type = 'text/plain';
+				}
+				
+				if ( 'text' == substr( $mime_type, 0, 4 ) ) {
+					$caption = utf8_encode( trim( $iptc['2#120'][0] ) );
+					if ( empty( $meta['title'] ) ) {
+						// Assume the title is stored in 2:120 if it's short.
+						if ( strlen( $caption ) < 80 )
+							$meta['title'] = $caption;
+						else
+							$meta['caption'] = $caption;
+					} elseif ( $caption != $meta['title'] ) {
 						$meta['caption'] = $caption;
-				} elseif ( $caption != $meta['title'] ) {
-					$meta['caption'] = $caption;
+					}
 				}
 			}
 
