Ciao
Puoi usare il metodo Replace sulle stringhe che ottieni. I caratteri null sembrano esserci perchè la stringa che ti viene restituita ha una lunghezza fissa (30 caratteri) e vengono usati come riempimento (magari stai sfruttando delle librerie scritte in c++)
Comunque scrivendo così dovrebbe andare a posto:
sw = File.CreateText(Application.StartupPath & "\table1.html")
sw.WriteLine("<html>")
sw.WriteLine("<table border = 2>")
sw.WriteLine("<tr><td>" & id.title.Replace(vbNullChar, "") & _
"</td><td>" & id.artist.Replace(vbNullChar, "") & _
"</td><td>" & id.album.Replace(vbNullChar, "") & _
"</td><td>" & id.genre.Replace(vbNullChar, "") & "</td></tr>")
sw.WriteLine("</table>")
sw.WriteLine("</html>")
sw.Flush()
sw.Close()
Luca