diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index c305b36..63ddcf2 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -13,7 +13,7 @@
 - Deprecated the old rsa._version133 and rsa._version200 submodules, they will be
   completely removed in version 4.0.
 - Add an 'exponent' argument to key.newkeys()
-- Fixed bugs #12, #14, #27, #30
+- Fixed bugs #12, #14, #27, #30, #49
 - Switched from Solovay-Strassen to Miller-Rabin primality testing, to
   comply with NIST FIPS 186-4 [4] as probabilistic primality test
   (Appendix C, subsection C.3):
diff --git a/rsa/pem.py b/rsa/pem.py
index 32a9706..0f68cb2 100644
--- a/rsa/pem.py
+++ b/rsa/pem.py
@@ -47,6 +47,10 @@
 
     """
 
+    # We want bytes, not text. If it's text, it can be converted to ASCII bytes.
+    if not is_bytes(contents):
+        contents = contents.encode('ascii')
+
     (pem_start, pem_end) = _markers(pem_marker)
 
     pem_lines = []
diff --git a/tests/test_pem.py b/tests/test_pem.py
index 05bbb9b..952ec79 100644
--- a/tests/test_pem.py
+++ b/tests/test_pem.py
@@ -16,12 +16,59 @@
 #  limitations under the License.
 
 import unittest
+
 from rsa._compat import b
 from rsa.pem import _markers
+import rsa.key
+
+# 512-bit key. Too small for practical purposes, but good enough for testing with.
+public_key_pem = '''
+-----BEGIN PUBLIC KEY-----
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKH0aYP9ZFuctlPnXhEyHjgc8ltKKx9M
+0c+h4sKMXwjhjbQAZdtWIw8RRghpUJnKj+6bN2XzZDazyULxgPhtax0CAwEAAQ==
+-----END PUBLIC KEY-----
+'''
+
+private_key_pem = '''
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAKH0aYP9ZFuctlPnXhEyHjgc8ltKKx9M0c+h4sKMXwjhjbQAZdtW
+Iw8RRghpUJnKj+6bN2XzZDazyULxgPhtax0CAwEAAQJADwR36EpNzQTqDzusCFIq
+ZS+h9X8aIovgBK3RNhMIGO2ThpsnhiDTcqIvgQ56knbl6B2W4iOl54tJ6CNtf6l6
+zQIhANTaNLFGsJfOvZHcI0WL1r89+1A4JVxR+lpslJJwAvgDAiEAwsjqqZ2wY2F0
+F8p1J98BEbtjU2mEZIVCMn6vQuhWdl8CIDRL4IJl4eGKlB0QP0JJF1wpeGO/R76l
+DaPF5cMM7k3NAiEAss28m/ck9BWBfFVdNjx/vsdFZkx2O9AX9EJWoBSnSgECIQCa
++sVQMUVJFGsdE/31C7wCIbE3IpB7ziABZ7mN+V3Dhg==
+-----END RSA PRIVATE KEY-----
+'''
+
+# Private key components
+prime1 = 96275860229939261876671084930484419185939191875438854026071315955024109172739
+prime2 = 88103681619592083641803383393198542599284510949756076218404908654323473741407
 
 
 class TestMarkers(unittest.TestCase):
     def test_values(self):
         self.assertEqual(_markers('RSA PRIVATE KEY'),
-            (b('-----BEGIN RSA PRIVATE KEY-----'),
-             b('-----END RSA PRIVATE KEY-----')))
+                         (b('-----BEGIN RSA PRIVATE KEY-----'),
+                          b('-----END RSA PRIVATE KEY-----')))
+
+
+class TestBytesAndStrings(unittest.TestCase):
+    """Test that we can use PEM in both Unicode strings and bytes."""
+
+    def test_unicode_public(self):
+        key = rsa.key.PublicKey.load_pkcs1_openssl_pem(public_key_pem)
+        self.assertEqual(prime1 * prime2, key.n)
+
+    def test_bytes_public(self):
+        key = rsa.key.PublicKey.load_pkcs1_openssl_pem(public_key_pem.encode('ascii'))
+        self.assertEqual(prime1 * prime2, key.n)
+
+    def test_unicode_private(self):
+        key = rsa.key.PrivateKey.load_pkcs1(private_key_pem)
+        self.assertEqual(prime1 * prime2, key.n)
+
+    def test_bytes_private(self):
+        key = rsa.key.PrivateKey.load_pkcs1(private_key_pem.encode('ascii'))
+        self.assertEqual(prime1, key.p)
+        self.assertEqual(prime2, key.q)
