diff --git a/includes/descriptionList.py b/includes/descriptionList.py index fac53cc..3a5b662 100644 --- a/includes/descriptionList.py +++ b/includes/descriptionList.py @@ -14,7 +14,7 @@ import logging # Global logger import csv # for loading the description files from includes import globals # Global variables -from includes.helper import uft8Converter # UTF-8 converter +from includes.helper import stringConverter ## @@ -39,7 +39,7 @@ def loadCSV(typ, idField): # only import rows with an integer as id if row[idField].isdigit() == True: try: - resultList[row[idField]] = uft8Converter.convertToUTF8(row['description']) + resultList[row[idField]] = stringConverter.convertToUTF8(row['description']) except: # skip entry in case of an exception pass diff --git a/includes/globals.py b/includes/globals.py index a9b307d..ad3251e 100644 --- a/includes/globals.py +++ b/includes/globals.py @@ -10,7 +10,7 @@ Global variables # version info versionNr = "2.1-dev" -buildDate = "2015/07/29" +buildDate = "2015/07/30" # Global variables config = 0 diff --git a/includes/helper/stringConverter.py b/includes/helper/stringConverter.py new file mode 100644 index 0000000..4d2ee4b --- /dev/null +++ b/includes/helper/stringConverter.py @@ -0,0 +1,171 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# + +""" +little Helper for converting strings + +@author: Jens Herrmann +""" + +import logging + +# +# local helper function to decode a string... +# +def decodeString(inputString = ""): + """ + Returns given string as unicode + + @type string: String + @param string: String to convert to unicode + + @return: string in unicode + @exception: Exception if converting to unicode failed + """ + decodedString = "" + logging.debug("call decodeString('%s')", inputString) + # try to find out encoding: + encodings = ('utf-8', 'windows-1250', 'windows-1252', 'latin_1', 'cp850', 'cp852', 'iso8859_2', 'iso8859_15', 'mac_latin2', 'mac_roman') + for enc in encodings: + try: + decodedString = inputString.decode(enc) + logging.debug("-- string was encoded in: %s", enc) + break + except Exception: + # if exception for last encoding entry fail, raise exception + if enc == encodings[-1]: + logging.warning("no encoding found") + logging.debug("no encoding found", exc_info=True) + # no fixing possible, raise exception + raise + pass + return decodedString + + +def convertToUnicode(inputString = ""): + """ + Returns given string as unicode + + @type string: String + @param string: String to convert to unicode + + @return: string in unicode + @exception: Exception if converting to unicode failed + """ + + decodedString = "" + logging.debug("call convertToUnicode('%s')", inputString) + + # nothing to do if inputString is empty + if len(inputString) > 0: + # 1. check if integer + try: + if int(inputString): + logging.debug("-- integer") + # ... then return it + return inputString + except ValueError: + # ... no integer is okay... + pass + + # 2. Check if inputString is unicode... + if isinstance(inputString, unicode): + logging.debug("-- unicode") + return inputString + + try: + # try to decoding: + decodedString = decodeString(inputString) + except: + logging.warning("decoding string failed") + logging.debug("encoding string failed", exc_info=True) + # no fixing possible, raise exception + raise + return decodedString + + + +def convertToUTF8(inputString = ""): + """ + Returns given string in UTF-8 + + @type string: String + @param string: String to convert to UTF-8 + + @return: string in UTF-8 + @exception: Exception if converting to UTF-8 failed + """ + + uft8String = "" + logging.debug("call convertToUTF8('%s')", inputString) + + # nothing to do if inputString is empty + if len(inputString) > 0: + try: + # 1. check if integer + try: + if int(inputString): + logging.debug("-- integer") + # ... then return it + return inputString + except ValueError: + pass + + # 2. Check if inputString is unicode... + if isinstance(inputString, unicode): + logging.debug("-- unicode") + # ... then return it as UTF-8 + uft8String = decodedString.encode('UTF-8') + return uft8String + + # 2. check given inputString is already UTF-8... + decodedString = inputString.decode('UTF-8', 'strict') + # ... no UnicodeDecodeError exception, inputString ist UTF-8 + logging.debug("-- UTF-8") + return inputString + + except UnicodeDecodeError: + # inputString contains non-UTF-8 character + logging.debug("string contains non-UTF-8 characters: %s", inputString) + + try: + # try to decoding: + decodedString = decodeString(inputString) + except: + logging.warning("decoding string failed") + logging.debug("encoding string failed", exc_info=True) + # no fixing possible, raise exception + raise + + # inputString should now decoded... + + try: + # encode decodedString to UTF-8 + uft8String = decodedString.encode('UTF-8') + except: + logging.warning("encoding to UTF-8 failed") + logging.debug("encoding to UTF-8 failed", exc_info=True) + # no fixing possible, raise exception + raise + + # Now we must have an utf8-string, check it: + try: + uft8String.decode('UTF-8', 'strict') + logging.debug("string converting succeeded: %s", uft8String) + except: + logging.warning("converting to UTF-8 failed") + logging.debug("converting to UTF-8 failed", exc_info=True) + # no fixing possible, raise exception + raise + + # End of exception UnicodeDecodeError: check given string is already UTF-8 + pass + + except: + logging.warning("error checking given string") + logging.debug("error checking given string", exc_info=True) + # no fixing possible, raise exception + raise + + return uft8String \ No newline at end of file diff --git a/includes/helper/uft8Converter.py b/includes/helper/uft8Converter.py deleted file mode 100644 index 16fee3e..0000000 --- a/includes/helper/uft8Converter.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/python -# -*- coding: UTF-8 -*- -# - -""" -little Helper for converting strings - -@author: Jens Herrmann -""" - -import logging - - -def convertToUTF8(string = ""): - """ - Returns given string in UTF-8 - - @type string: String - @param string: String to convert to UTF-8 - - @return: string in UTF-8 - @exception: Exception if converting to UTF-8 failed - """ - - uft8String = "" - - # nothing to do if string is empty - if len(string) > 0: - try: - # check given string is already UTF-8, return - return string.decode('UTF-8', 'strict') - except UnicodeDecodeError: - # string contains non-UTF-8 character - logging.debug("string contains non-UTF-8 characters: %s", string) - - # try to find out encoding: - encodings = ('windows-1250', 'windows-1252', 'latin_1', 'cp850', 'cp852', 'iso8859_2', 'iso8859_15', 'mac_latin2', 'mac_roman') - for enc in encodings: - try: - string = string.decode(enc) - logging.debug("string was encoded in: %s", enc) - break - except Exception: - # if exception for last encoding entry fail, raise exception - if enc == encodings[-1]: - logging.warning("no encoding found") - logging.debug("no encoding found", exc_info=True) - # no fixing possible, raise exception - raise - pass - - # string should now decoded... - - try: - # encode decoded string to UTF-8 - uft8String = string.encode('UTF-8') - except: - logging.warning("encoding to UTF-8 failed") - logging.debug("encoding to UTF-8 failed", exc_info=True) - # no fixing possible, raise exception - raise - - # Now we must have an utf8-string, check it: - try: - uft8String.decode('UTF-8', 'strict') - logging.debug("string converting succeeded: %s", uft8String) - except: - logging.warning("converting to UTF-8 failed") - logging.debug("converting to UTF-8 failed", exc_info=True) - # no fixing possible, raise exception - raise - - # End of exception: check given string is already UTF-8 - pass - - return uft8String \ No newline at end of file diff --git a/plugins/firEmergency/firEmergency.py b/plugins/firEmergency/firEmergency.py index 10fe941..329120f 100644 --- a/plugins/firEmergency/firEmergency.py +++ b/plugins/firEmergency/firEmergency.py @@ -18,6 +18,8 @@ import socket from includes import globals # Global variables from includes.helper import configHandler +from includes.helper import stringConverter + ### # @@ -85,7 +87,8 @@ def run(typ,freq,data): elif typ == "ZVEI": logging.debug("ZVEI to firEmergency") try: - firXML = "\n
"+data["zvei"]+"
\n"+data["description"]+"\n"+data["zvei"]+" alarmiert.\n
\n" + description = stringConverter.convertToUTF8(data["description"]) + firXML = "\n
"+data["zvei"]+"
\n"+description+"\n"+data["zvei"]+"\n
\n" firSocket.send(firXML) except: logging.error("%s to firEmergency failed", typ) @@ -97,7 +100,9 @@ def run(typ,freq,data): logging.debug("POC to firEmergency") try: # !!! Subric+"XX" because of an Issuse in firEmergency !!! - firXML = "\n
"+data["ric"]+"
\n"+data["function"]+"XX\n"+data["description"]+"\n"+data["msg"]+"\n
\n" + description = stringConverter.convertToUTF8(data["description"]) + msg = stringConverter.convertToUTF8(data["msg"]) + firXML = "\n
"+data["ric"]+"
\n"+data["function"]+"XX\n"+description+"\n"+msg+"\n
\n" firSocket.send(firXML) except: logging.error("%s to firEmergency failed", typ) diff --git a/plugins/notifyMyAndroid/notifyMyAndroid.py b/plugins/notifyMyAndroid/notifyMyAndroid.py index e09a795..912865c 100644 --- a/plugins/notifyMyAndroid/notifyMyAndroid.py +++ b/plugins/notifyMyAndroid/notifyMyAndroid.py @@ -1,5 +1,5 @@ #!/usr/bin/python -# -*- coding: UTF-8 -*- +# -*- coding: utf-8 -*- """ notifyMyAndroid-Plugin to dispatch FMS-, ZVEI- and POCSAG-messages via UDP/TCP @@ -20,7 +20,7 @@ from includes import globals # Global variables from includes.helper import configHandler from includes.helper import timeHandler -from includes.helper import uft8Converter # UTF-8 converter +from includes.helper import stringConverter from includes.pynma import pynma @@ -93,7 +93,7 @@ def onLoad(): # load config: configHandler.checkConfig("notifyMyAndroid") - application = globals.config.get("notifyMyAndroid","appName") + application = stringConverter.convertToUnicode(globals.config.get("notifyMyAndroid","appName")) usecsv = globals.config.getboolean("notifyMyAndroid","usecsv") # if no csv should use, we take the APIKey directly @@ -207,11 +207,12 @@ def run(typ,freq,data): logging.debug("Start %s to NMA", typ) try: # build event and msg - event = uft8Converter.convertToUTF8(data['description']) - msg = timeHandler.curtime() - if len(data['msg']) > 0: + # pyNMA expect strings are not in UTF-8 + event = stringConverter.convertToUnicode(data['description']) + msg = timeHandler.curtime() + if ("POC" in typ) and (len(data['msg']) > 0): msg += "\n" + data['msg'] - msg = uft8Converter.convertToUTF8(msg) + msg = stringConverter.convertToUnicode(msg) # if not using csv-import, all is simple... if usecsv == False: