  http://slashdot.jp/~doda/journal/516198 (in Japanese)
  http://lists.gnu.org/archive/html/bug-gnu-emacs/2011-04/msg00319.html

--- src/coding.c.orig 2012-08-23 14:33:42.000000000 +0900
+++ src/coding.c      2012-11-10 23:52:04.000000000 +0900
@@ -3777,8 +3777,14 @@
 	      else
 		charset = CHARSET_FROM_ID (charset_id_2);
 	      ONE_MORE_BYTE (c1);
-	      if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
-		goto invalid_code;
+	      if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) {
+		if (c1 < 0x20 || c1 >= 0x80)
+		  goto invalid_code;
+	      }
+	      else {
+		if (c1 < 0xA0)
+		  goto invalid_code;
+	      }
 	      break;
 
 	    case 'O':		/* invocation of single-shift-3 */
@@ -3791,8 +3797,14 @@
 	      else
 		charset = CHARSET_FROM_ID (charset_id_3);
 	      ONE_MORE_BYTE (c1);
-	      if (c1 < 0x20 || (c1 >= 0x80 && c1 < 0xA0))
-		goto invalid_code;
+	      if (CODING_ISO_FLAGS (coding) & CODING_ISO_FLAG_SEVEN_BITS) {
+		if (c1 < 0x20 || c1 >= 0x80)
+		  goto invalid_code;
+	      }
+	      else {
+		if (c1 < 0xA0)
+		  goto invalid_code;
+	      }
 	      break;
 
 	    case '0': case '2':	case '3': case '4': /* start composition */
