diff --git a/pyte/compat.py b/pyte/compat.py
index <HASH>..<HASH> 100644
--- a/pyte/compat.py
+++ b/pyte/compat.py
@@ -18,5 +18,9 @@ if sys.version_info[0] == 2:
     range = xrange
     str = unicode
     chr = unichr
+
+    from functools import partial
+    iter_bytes = partial(map, ord)
 else:
     from builtins import map, range, str, chr
+    iter_bytes = iter
diff --git a/pyte/screens.py b/pyte/screens.py
index <HASH>..<HASH> 100644
--- a/pyte/screens.py
+++ b/pyte/screens.py
@@ -40,7 +40,7 @@ from . import (
     graphics as g,
     modes as mo
 )
-from .compat import map, range
+from .compat import iter_bytes, map, range
 from .streams import Stream
 
 
@@ -427,11 +427,11 @@ class Screen(object):
            multiple characters.
         """
         if self.charset:
-            chars = "".join(self.g1_charset[ch] for ch in data)
+            chars = "".join(self.g1_charset[b] for b in iter_bytes(data))
         elif self.use_utf8:
             chars = data.decode("utf-8")
         else:
-            chars = "".join(self.g0_charset[ch] for ch in data)
+            chars = "".join(self.g0_charset[b] for b in iter_bytes(data))
 
         for char in chars:
             char_width = wcwidth(char)
Added a workaround for ``bytes`` iteration

  try this on Python2.X

  >>> alphabet = "".join(map(chr, range(<I>))
  >>> [alphabet[b] for b in b"<I>!"]