Index: wp-admin/includes/image.php
===================================================================
--- wp-admin/includes/image.php	(revision 17246)
+++ wp-admin/includes/image.php	(working copy)
@@ -230,13 +230,13 @@
 
 			// headline, "A brief synopsis of the caption."
 			if ( ! empty( $iptc['2#105'][0] ) )
-				$meta['title'] = utf8_encode( trim( $iptc['2#105'][0] ) );
+				$meta['title'] = wp_iptc_utf8_encode( trim( $iptc['2#105'][0] ) );
 			// title, "Many use the Title field to store the filename of the image, though the field may be used in many ways."
 			elseif ( ! empty( $iptc['2#005'][0] ) )
-				$meta['title'] = utf8_encode( trim( $iptc['2#005'][0] ) );
+				$meta['title'] = wp_iptc_utf8_encode( trim( $iptc['2#005'][0] ) );
 
 			if ( ! empty( $iptc['2#120'][0] ) ) { // description / legacy caption
-				$caption = utf8_encode( trim( $iptc['2#120'][0] ) );
+				$caption = wp_iptc_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 )
@@ -249,15 +249,15 @@
 			}
 
 			if ( ! empty( $iptc['2#110'][0] ) ) // credit
-				$meta['credit'] = utf8_encode(trim($iptc['2#110'][0]));
+				$meta['credit'] = wp_iptc_utf8_encode(trim($iptc['2#110'][0]));
 			elseif ( ! empty( $iptc['2#080'][0] ) ) // creator / legacy byline
-				$meta['credit'] = utf8_encode(trim($iptc['2#080'][0]));
+				$meta['credit'] = wp_iptc_utf8_encode(trim($iptc['2#080'][0]));
 
 			if ( ! empty( $iptc['2#055'][0] ) and ! empty( $iptc['2#060'][0] ) ) // created date and time
 				$meta['created_timestamp'] = strtotime( $iptc['2#055'][0] . ' ' . $iptc['2#060'][0] );
 
 			if ( ! empty( $iptc['2#116'][0] ) ) // copyright
-				$meta['copyright'] = utf8_encode( trim( $iptc['2#116'][0] ) );
+				$meta['copyright'] = wp_iptc_utf8_encode( trim( $iptc['2#116'][0] ) );
 		 }
 	}
 
@@ -266,38 +266,38 @@
 		$exif = @exif_read_data( $file );
 
 		if ( !empty( $exif['Title'] ) )
-			$meta['title'] = utf8_encode( trim( $exif['Title'] ) );
+			$meta['title'] = wp_iptc_utf8_encode( trim( $exif['Title'] ) );
 
 		if ( ! empty( $exif['ImageDescription'] ) ) {
 			if ( empty( $meta['title'] ) && strlen( $exif['ImageDescription'] ) < 80 ) {
 				// Assume the title is stored in ImageDescription
-				$meta['title'] = utf8_encode( trim( $exif['ImageDescription'] ) );
+				$meta['title'] = wp_iptc_utf8_encode( trim( $exif['ImageDescription'] ) );
 				if ( ! empty( $exif['COMPUTED']['UserComment'] ) && trim( $exif['COMPUTED']['UserComment'] ) != $meta['title'] )
-					$meta['caption'] = utf8_encode( trim( $exif['COMPUTED']['UserComment'] ) );
+					$meta['caption'] = wp_iptc_utf8_encode( trim( $exif['COMPUTED']['UserComment'] ) );
 			} elseif ( trim( $exif['ImageDescription'] ) != $meta['title'] ) {
-				$meta['caption'] = utf8_encode( trim( $exif['ImageDescription'] ) );
+				$meta['caption'] = wp_iptc_utf8_encode( trim( $exif['ImageDescription'] ) );
 			}
 		} elseif ( ! empty( $exif['Comments'] ) && trim( $exif['Comments'] ) != $meta['title'] ) {
-			$meta['caption'] = utf8_encode( trim( $exif['Comments'] ) );
+			$meta['caption'] = wp_iptc_utf8_encode( trim( $exif['Comments'] ) );
 		}
 
 		if ( ! empty( $exif['Artist'] ) )
-			$meta['credit'] = utf8_encode( trim( $exif['Artist'] ) );
+			$meta['credit'] = wp_iptc_utf8_encode( trim( $exif['Artist'] ) );
 		elseif ( ! empty($exif['Author'] ) )
-			$meta['credit'] = utf8_encode( trim( $exif['Author'] ) );
+			$meta['credit'] = wp_iptc_utf8_encode( trim( $exif['Author'] ) );
 
 		if ( ! empty( $exif['Copyright'] ) )
-			$meta['copyright'] = utf8_encode( trim( $exif['Copyright'] ) );
+			$meta['copyright'] = wp_iptc_utf8_encode( trim( $exif['Copyright'] ) );
 		if ( ! empty($exif['FNumber'] ) )
 			$meta['aperture'] = round( wp_exif_frac2dec( $exif['FNumber'] ), 2 );
 		if ( ! empty($exif['Model'] ) )
-			$meta['camera'] = utf8_encode( trim( $exif['Model'] ) );
+			$meta['camera'] = wp_iptc_utf8_encode( trim( $exif['Model'] ) );
 		if ( ! empty($exif['DateTimeDigitized'] ) )
 			$meta['created_timestamp'] = wp_exif_date2ts($exif['DateTimeDigitized'] );
 		if ( ! empty($exif['FocalLength'] ) )
 			$meta['focal_length'] = wp_exif_frac2dec( $exif['FocalLength'] );
 		if ( ! empty($exif['ISOSpeedRatings'] ) )
-			$meta['iso'] = utf8_encode( trim( $exif['ISOSpeedRatings'] ) );
+			$meta['iso'] = wp_iptc_utf8_encode( trim( $exif['ISOSpeedRatings'] ) );
 		if ( ! empty($exif['ExposureTime'] ) )
 			$meta['shutter_speed'] = wp_exif_frac2dec( $exif['ExposureTime'] );
 	}
@@ -307,6 +307,30 @@
 }
 
 /**
+ * UTF8 encode IPTC data
+ * 
+ * this is a simple implementation ignoring IPTC documentation:
+ *   a) if the data is valid utf8 then there is nothing to do
+ *   b) if not, assume ISO-8859-1 and encode it to utf-8
+ * 
+ * 
+ * @link http://de2.php.net/manual/en/function.iptcparse.php
+ * @link http://www.iptc.org/std/IIM/4.1/specification/IIMV4.1.pdf
+ * 
+ * @since 3.2
+ *
+ * @param string $itpc raw IRB value returned by iptcparse()
+ * @return string utf8 encoded value
+ */
+function wp_iptc_utf8_encode($itpc) {
+	
+	if ( false == seems_utf8($itpc) )
+		$itpc = utf8_encode($itpc);
+	
+	return $itpc;
+}
+
+/**
  * Validate that file is an image.
  *
  * @since 2.5.0
