Index: wp-admin/includes/file.php
===================================================================
--- wp-admin/includes/file.php	(revision 17248)
+++ wp-admin/includes/file.php	(working copy)
@@ -271,6 +271,9 @@
 		}
 	}
 
+	// Ensure the filename on the filesystem matches the filename we record in WP
+	$file[ 'name' ] = urldecode( $file[ 'name' ] );
+
 	$file = apply_filters( 'wp_handle_upload_prefilter', $file );
 
 	// You may define your own function and pass the name in $overrides['upload_error_handler']
Index: wp-admin/includes/media.php
===================================================================
--- wp-admin/includes/media.php	(revision 17248)
+++ wp-admin/includes/media.php	(working copy)
@@ -196,7 +196,7 @@
 			$time = $post->post_date;
 	}
 
-	$name = $_FILES[$file_id]['name'];
+	$name = urldecode( $_FILES[$file_id]['name'] );
 	$file = wp_handle_upload($_FILES[$file_id], $overrides, $time);
 
 	if ( isset($file['error']) )
