diff --git a/ChangeLog b/ChangeLog
index 940d93359d..4339904cdc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -23,6 +23,8 @@ Mon Dec 24 02:59:32 2007  Yukihiro Matsumoto  <matz@ruby-lang.org>
 	* string.c (str_new_shared): was setting embedding flag of wrong
 	  string object.  [ruby-dev:32685]
 
+	* io.c (io_enc_str): should preserve default_external encoding.
+
 Mon Dec 24 02:06:35 2007  Yukihiro Matsumoto  <matz@ruby-lang.org>
 
 	* io.c (rb_f_open): documentation update.
diff --git a/io.c b/io.c
index 3dda55cdc1..54bff0ecb9 100644
--- a/io.c
+++ b/io.c
@@ -1316,9 +1316,9 @@ io_enc_str(VALUE str, rb_io_t *fptr)
 			 rb_enc_from_encoding(fptr->enc),
 			 rb_enc_from_encoding(fptr->enc2));
     }
-    else if (fptr->enc) {
+    else {
 	/* just one encoding, so associate it with the string */
-	rb_enc_associate(str, fptr->enc);
+	rb_enc_associate(str, io_read_encoding(fptr));
     }
     return str;
 }