diff --git a/tests/lib/test_input_output.py b/tests/lib/test_input_output.py
index 9ccc8fc..3277a88 100644
--- a/tests/lib/test_input_output.py
+++ b/tests/lib/test_input_output.py
@@ -34,11 +34,11 @@
 
 def test_unicode_input_errors(unicode_filename, verbose=False):
     data = open(unicode_filename, 'rb').read().decode('utf-8')
-    for input in [data.encode('latin1', 'ignore'),
-                    data.encode('utf-16-be'), data.encode('utf-16-le'),
-                    codecs.BOM_UTF8+data.encode('utf-16-be'),
-                    codecs.BOM_UTF16_BE+data.encode('utf-16-le'),
-                    codecs.BOM_UTF16_LE+data.encode('utf-8')+'!']:
+    for input in [data.encode('utf-16-be'),
+            data.encode('utf-16-le'),
+            codecs.BOM_UTF8+data.encode('utf-16-be'),
+            codecs.BOM_UTF8+data.encode('utf-16-le')]:
+
         try:
             yaml.load(input)
         except yaml.YAMLError, exc:
@@ -69,17 +69,7 @@
             stream = StringIO.StringIO()
             yaml.dump(value, stream, encoding=encoding, allow_unicode=allow_unicode)
             data4 = stream.getvalue()
-            for copy in [data1, data2, data3, data4]:
-                if allow_unicode:
-                    try:
-                        copy[4:].encode('ascii')
-                    except (UnicodeDecodeError, UnicodeEncodeError), exc:
-                        if verbose:
-                            print exc
-                    else:
-                        raise AssertionError("expected an exception")
-                else:
-                    copy[4:].encode('ascii')
+
             assert isinstance(data1, str), (type(data1), encoding)
             data1.decode('utf-8')
             assert isinstance(data2, str), (type(data2), encoding)
@@ -148,4 +138,3 @@
 if __name__ == '__main__':
     import test_appliance
     test_appliance.run(globals())
-
diff --git a/tests/lib3/test_input_output.py b/tests/lib3/test_input_output.py
index 70a945a..50f0122 100644
--- a/tests/lib3/test_input_output.py
+++ b/tests/lib3/test_input_output.py
@@ -24,11 +24,11 @@
 
 def test_unicode_input_errors(unicode_filename, verbose=False):
     data = open(unicode_filename, 'rb').read().decode('utf-8')
-    for input in [data.encode('latin1', 'ignore'),
-                    data.encode('utf-16-be'), data.encode('utf-16-le'),
-                    codecs.BOM_UTF8+data.encode('utf-16-be'),
-                    codecs.BOM_UTF16_BE+data.encode('utf-16-le'),
-                    codecs.BOM_UTF16_LE+data.encode('utf-8')+b'!']:
+    for input in [data.encode('utf-16-be'),
+            data.encode('utf-16-le'),
+            codecs.BOM_UTF8+data.encode('utf-16-be'),
+            codecs.BOM_UTF8+data.encode('utf-16-le')]:
+
         try:
             yaml.load(input)
         except yaml.YAMLError as exc:
@@ -75,20 +75,7 @@
                 if verbose:
                     print("BYTES:", data4[:50])
                 data4 = data4.decode(encoding)
-            for copy in [data1, data2, data3, data4]:
-                if copy is None:
-                    continue
-                assert isinstance(copy, str)
-                if allow_unicode:
-                    try:
-                        copy[4:].encode('ascii')
-                    except UnicodeEncodeError as exc:
-                        if verbose:
-                            print(exc)
-                    else:
-                        raise AssertionError("expected an exception")
-                else:
-                    copy[4:].encode('ascii')
+
             assert isinstance(data1, str), (type(data1), encoding)
             assert isinstance(data2, str), (type(data2), encoding)
 
@@ -147,4 +134,3 @@
 if __name__ == '__main__':
     import test_appliance
     test_appliance.run(globals())
-
