diff --git a/Lib/doctest.py b/Lib/doctest.py
index 3f139fc..bc30a1a 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -209,7 +209,7 @@
         filename = _module_relative_path(package, filename)
         if hasattr(package, '__loader__'):
             if hasattr(package.__loader__, 'get_data'):
-                return package.__loader__.get_data(filename), filename
+                return package.__loader__.get_data(filename).decode('utf-8'), filename
     return open(filename, encoding="utf-8").read(), filename
 
 def _indent(s, indent=4):
diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py
index 8daac4b..bae2172 100644
--- a/Lib/test/test_zipimport.py
+++ b/Lib/test/test_zipimport.py
@@ -153,18 +153,16 @@
 
     def testBadMagic(self):
         # make pyc magic word invalid, forcing loading from .py
-        m0 = ord(test_pyc[0])
-        m0 ^= 0x04  # flip an arbitrary bit
-        badmagic_pyc = chr(m0) + test_pyc[1:]
+        badmagic_pyc = bytes(test_pyc)
+        badmagic_pyc[0] ^= 0x04  # flip an arbitrary bit
         files = {TESTMOD + ".py": (NOW, test_src),
                  TESTMOD + pyc_ext: (NOW, badmagic_pyc)}
         self.doTest(".py", files, TESTMOD)
 
     def testBadMagic2(self):
         # make pyc magic word invalid, causing an ImportError
-        m0 = ord(test_pyc[0])
-        m0 ^= 0x04  # flip an arbitrary bit
-        badmagic_pyc = chr(m0) + test_pyc[1:]
+        badmagic_pyc = bytes(test_pyc)
+        badmagic_pyc[0] ^= 0x04  # flip an arbitrary bit
         files = {TESTMOD + pyc_ext: (NOW, badmagic_pyc)}
         try:
             self.doTest(".py", files, TESTMOD)
@@ -174,10 +172,9 @@
             self.fail("expected ImportError; import from bad pyc")
 
     def testBadMTime(self):
-        t3 = ord(test_pyc[7])
-        t3 ^= 0x02  # flip the second bit -- not the first as that one
-                    # isn't stored in the .py's mtime in the zip archive.
-        badtime_pyc = test_pyc[:7] + chr(t3) + test_pyc[8:]
+        badtime_pyc = bytes(test_pyc)
+        badtime_pyc[7] ^= 0x02  # flip the second bit -- not the first as that one
+                                # isn't stored in the .py's mtime in the zip archive.
         files = {TESTMOD + ".py": (NOW, test_src),
                  TESTMOD + pyc_ext: (NOW, badtime_pyc)}
         self.doTest(".py", files, TESTMOD)
@@ -232,7 +229,7 @@
         z.compression = self.compression
         try:
             name = "testdata.dat"
-            data = "".join([chr(x) for x in range(256)]) * 500
+            data = bytes(x for x in range(256))
             z.writestr(name, data)
             z.close()
             zi = zipimport.zipimporter(TEMP_ZIP)
@@ -246,7 +243,7 @@
         src = """if 1:  # indent hack
         def get_file():
             return __file__
-        if __loader__.get_data("some.data") != "some data":
+        if __loader__.get_data("some.data") != b"some data":
             raise AssertionError, "bad data"\n"""
         pyc = make_pyc(compile(src, "<???>", "exec"), NOW)
         files = {TESTMOD + pyc_ext: (NOW, pyc),
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
index bf913f3..fc93011 100644
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -475,8 +475,12 @@
 		strcpy(path + len, ".py");
 
 	toc_entry = PyDict_GetItemString(self->files, path);
-	if (toc_entry != NULL)
-		return get_data(PyString_AsString(self->archive), toc_entry);
+	if (toc_entry != NULL) {
+		PyObject *bytes = get_data(PyString_AsString(self->archive), toc_entry);
+		PyObject *res = PyUnicode_FromString(PyBytes_AsString(bytes));
+		Py_XDECREF(bytes);
+		return res;
+	}
 
 	/* we have the module, but no source */
 	Py_INCREF(Py_None);
@@ -857,8 +861,10 @@
 	}
 	buf[data_size] = '\0';
 
-	if (compress == 0)  /* data is not compressed */
+	if (compress == 0) {  /* data is not compressed */
+		raw_data = PyBytes_FromStringAndSize(buf, data_size);
 		return raw_data;
+	}
 
 	/* Decompress with zlib */
 	decompress = get_decompress_func();
@@ -896,8 +902,8 @@
 unmarshal_code(char *pathname, PyObject *data, time_t mtime)
 {
 	PyObject *code;
-	char *buf = PyString_AsString(data);
-	Py_ssize_t size = PyString_Size(data);
+	char *buf = PyBytes_AsString(data);
+	Py_ssize_t size = PyBytes_Size(data);
 
 	if (size <= 9) {
 		PyErr_SetString(ZipImportError,
@@ -942,14 +948,16 @@
 static PyObject *
 normalize_line_endings(PyObject *source)
 {
-	char *buf, *q, *p = PyString_AsString(source);
+	char *buf, *q, *p = PyBytes_AsString(source);
 	PyObject *fixed_source;
+	int len = 0;
 
-	if (!p)
-		return NULL;
+	if (!p) {
+		return PyBytes_FromStringAndSize("\n\0", 2);
+	}
 
 	/* one char extra for trailing \n and one for terminating \0 */
-	buf = (char *)PyMem_Malloc(PyString_Size(source) + 2);
+	buf = (char *)PyMem_Malloc(PyBytes_Size(source) + 2);
 	if (buf == NULL) {
 		PyErr_SetString(PyExc_MemoryError,
 				"zipimport: no memory to allocate "
@@ -965,10 +973,11 @@
 		}
 		else
 			*q++ = *p;
+		len++;
 	}
 	*q++ = '\n';  /* add trailing \n */
 	*q = '\0';
-	fixed_source = PyString_FromString(buf);
+	fixed_source = PyBytes_FromStringAndSize(buf, len + 2);
 	PyMem_Free(buf);
 	return fixed_source;
 }
@@ -984,7 +993,7 @@
 	if (fixed_source == NULL)
 		return NULL;
 
-	code = Py_CompileString(PyString_AsString(fixed_source), pathname,
+	code = Py_CompileString(PyBytes_AsString(fixed_source), pathname,
 				Py_file_input);
 	Py_DECREF(fixed_source);
 	return code;
diff --git a/Python/import.c b/Python/import.c
index 25c768f..bb40b68 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2620,7 +2620,7 @@
 	buf[2] = (char) ((pyc_magic >> 16) & 0xff);
 	buf[3] = (char) ((pyc_magic >> 24) & 0xff);
 
-	return PyString_FromStringAndSize(buf, 4);
+	return PyBytes_FromStringAndSize(buf, 4);
 }
 
 static PyObject *
