Fixed bug #1194610 By detecting the encoding ranther than assuming.

This commit is contained in:
Philip Ridout 2013-08-03 20:15:59 +01:00
parent 97de1555fe
commit 961d70b836

View File

@ -30,6 +30,7 @@
The :mod:`songshowplusimport` module provides the functionality for importing The :mod:`songshowplusimport` module provides the functionality for importing
SongShow Plus songs into the OpenLP database. SongShow Plus songs into the OpenLP database.
""" """
import chardet
import os import os
import logging import logging
import re import re
@ -134,41 +135,41 @@ class SongShowPlusImport(SongImport):
log.debug(length_descriptor_size) log.debug(length_descriptor_size)
data = song_data.read(length_descriptor) data = song_data.read(length_descriptor)
if block_key == TITLE: if block_key == TITLE:
self.title = unicode(data, u'cp1252') self.title = unicode(data, chardet.detect(data)['encoding'])
elif block_key == AUTHOR: elif block_key == AUTHOR:
authors = data.split(" / ") authors = data.split(" / ")
for author in authors: for author in authors:
if author.find(",") !=-1: if author.find(",") !=-1:
authorParts = author.split(", ") authorParts = author.split(", ")
author = authorParts[1] + " " + authorParts[0] author = authorParts[1] + " " + authorParts[0]
self.parse_author(unicode(author, u'cp1252')) self.parse_author(unicode(author, chardet.detect(data)['encoding']))
elif block_key == COPYRIGHT: elif block_key == COPYRIGHT:
self.addCopyright(unicode(data, u'cp1252')) self.addCopyright(unicode(data, chardet.detect(data)['encoding']))
elif block_key == CCLI_NO: elif block_key == CCLI_NO:
self.ccliNumber = int(data) self.ccliNumber = int(data)
elif block_key == VERSE: elif block_key == VERSE:
self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.tags[VerseType.Verse], verse_no)) self.addVerse(unicode(data, chardet.detect(data)['encoding']), "%s%s" % (VerseType.tags[VerseType.Verse], verse_no))
elif block_key == CHORUS: elif block_key == CHORUS:
self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.tags[VerseType.Chorus], verse_no)) self.addVerse(unicode(data, chardet.detect(data)['encoding']), "%s%s" % (VerseType.tags[VerseType.Chorus], verse_no))
elif block_key == BRIDGE: elif block_key == BRIDGE:
self.addVerse(unicode(data, u'cp1252'), "%s%s" % (VerseType.tags[VerseType.Bridge], verse_no)) self.addVerse(unicode(data, chardet.detect(data)['encoding']), "%s%s" % (VerseType.tags[VerseType.Bridge], verse_no))
elif block_key == TOPIC: elif block_key == TOPIC:
self.topics.append(unicode(data, u'cp1252')) self.topics.append(unicode(data, chardet.detect(data)['encoding']))
elif block_key == COMMENTS: elif block_key == COMMENTS:
self.comments = unicode(data, u'cp1252') self.comments = unicode(data, chardet.detect(data)['encoding'])
elif block_key == VERSE_ORDER: elif block_key == VERSE_ORDER:
verse_tag = self.to_openlp_verse_tag(data, True) verse_tag = self.to_openlp_verse_tag(data, True)
if verse_tag: if verse_tag:
if not isinstance(verse_tag, unicode): if not isinstance(verse_tag, unicode):
verse_tag = unicode(verse_tag, u'cp1252') verse_tag = unicode(verse_tag, chardet.detect(data)['encoding'])
self.ssp_verse_order_list.append(verse_tag) self.ssp_verse_order_list.append(verse_tag)
elif block_key == SONG_BOOK: elif block_key == SONG_BOOK:
self.songBookName = unicode(data, u'cp1252') self.songBookName = unicode(data, chardet.detect(data)['encoding'])
elif block_key == SONG_NUMBER: elif block_key == SONG_NUMBER:
self.songNumber = ord(data) self.songNumber = ord(data)
elif block_key == CUSTOM_VERSE: elif block_key == CUSTOM_VERSE:
verse_tag = self.to_openlp_verse_tag(verse_name) verse_tag = self.to_openlp_verse_tag(verse_name)
self.addVerse(unicode(data, u'cp1252'), verse_tag) self.addVerse(unicode(data, chardet.detect(data)['encoding']), verse_tag)
else: else:
log.debug("Unrecognised blockKey: %s, data: %s" % (block_key, data)) log.debug("Unrecognised blockKey: %s, data: %s" % (block_key, data))
song_data.seek(next_block_starts) song_data.seek(next_block_starts)