py23 Add bytesjoin()
diff --git a/Lib/fontTools/ttLib/tables/_c_m_a_p.py b/Lib/fontTools/ttLib/tables/_c_m_a_p.py
index 224b346..44473be 100644
--- a/Lib/fontTools/ttLib/tables/_c_m_a_p.py
+++ b/Lib/fontTools/ttLib/tables/_c_m_a_p.py
@@ -56,7 +56,7 @@
 		numSubTables = len(self.tables)
 		totalOffset = 4 + 8 * numSubTables
 		data = struct.pack(">HH", self.tableVersion, numSubTables)
-		tableData = ""
+		tableData = b""
 		seen = {}  # Some tables are the same object reference. Don't compile them twice.
 		done = {}  # Some tables are different objects, but compile to the same data chunk
 		for table in self.tables:
diff --git a/Lib/fontTools/ttLib/tables/_g_l_y_f.py b/Lib/fontTools/ttLib/tables/_g_l_y_f.py
index 2be2974..06b12e4 100644
--- a/Lib/fontTools/ttLib/tables/_g_l_y_f.py
+++ b/Lib/fontTools/ttLib/tables/_g_l_y_f.py
@@ -70,7 +70,7 @@
 			currentLocation = currentLocation + len(glyphData)
 			dataList.append(glyphData)
 		locations.append(currentLocation)
-		data = ''.join(dataList)
+		data = bytesjoin(dataList)
 		if 'loca' in ttFont:
 			ttFont['loca'].set(locations)
 		ttFont['maxp'].numGlyphs = len(self.glyphs)
diff --git a/Lib/fontTools/ttLib/tables/_h_e_a_d.py b/Lib/fontTools/ttLib/tables/_h_e_a_d.py
index 0d150b6..182f328 100644
--- a/Lib/fontTools/ttLib/tables/_h_e_a_d.py
+++ b/Lib/fontTools/ttLib/tables/_h_e_a_d.py
@@ -127,11 +127,11 @@
 
 def long2bin(v, bytes=8):
 	mask = int("FF" * bytes, 16)
-	data = ""
+	data = b""
 	while v:
 		data = bytechr(v & 0xff) + data
 		v = (v >> 8) & mask
-	data = (bytes - len(data)) * "\0" + data
+	data = (bytes - len(data)) * b"\0" + data
 	assert len(data) == 8, "long too long"
 	return data
 
diff --git a/Lib/fontTools/ttLib/tables/_n_a_m_e.py b/Lib/fontTools/ttLib/tables/_n_a_m_e.py
index 3584bfc..36f1f4a 100644
--- a/Lib/fontTools/ttLib/tables/_n_a_m_e.py
+++ b/Lib/fontTools/ttLib/tables/_n_a_m_e.py
@@ -49,7 +49,7 @@
 			# from the TTX file
 			self.names = []
 		self.names.sort()  # sort according to the spec; see NameRecord.__lt__()
-		stringData = ""
+		stringData = b""
 		format = 0
 		n = len(self.names)
 		stringOffset = 6 + n * sstruct.calcsize(nameRecordFormat)
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index d43f156..72cbb3b 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -213,7 +213,7 @@
 			tableData = table.getData()
 			data.append(tableData)
 
-		return "".join(data)
+		return bytesjoin(data)
 	
 	def getDataLength(self):
 		"""Return the length of this table in bytes, without subtables."""
@@ -281,7 +281,7 @@
 						
 						raise OTLOffsetOverflowError(overflowErrorRecord)
 
-		return "".join(items)
+		return bytesjoin(items)
 	
 	def __hash__(self):
 		# only works after self._doneWriting() has been called