From bb468f25bf1fe16c26a113270143c6b2787fc5f5 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Mon, 17 Oct 2011 21:23:17 +0200 Subject: [PATCH] =?UTF-8?q?Hopefully=20fix=20crash=20on=20sending=20"Sch?= =?UTF-8?q?=C3=B6fferhofer"=20to=20LCD=20display?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client-barcode/freitagskasse.py | 3 ++- client-barcode/freitagslib/encoding.py | 35 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 client-barcode/freitagslib/encoding.py diff --git a/client-barcode/freitagskasse.py b/client-barcode/freitagskasse.py index 3d25160..4c3b604 100644 --- a/client-barcode/freitagskasse.py +++ b/client-barcode/freitagskasse.py @@ -7,6 +7,7 @@ from __future__ import print_function import freitagslib.network as net from freitagslib.commands import BuyCommand, DepositCommand +from freitagslib.encoding import asciify import colorama from colorama import Fore, Style @@ -332,7 +333,7 @@ class Status: mylabel="Pfand "+command.commodity_label()[:9] if (mycmd==3): mylabel=("%-13s" % (command.commodity_label()[:13]))+"+P" - print_display('\x0b%-15s %4.2f' % (mylabel[:15],abs(command.difference()))); + print_display('\x0b%-15s %4.2f' % (asciify(mylabel)[:15],abs(command.difference()))); print_display('\x0b\nSUMME: {%02i} %8.2f' % ((i-1),initial_balance - self.balance)); else: print_display('\x0b%-15s %4.2f' % (command.label()[:15],abs(command.difference()))); diff --git a/client-barcode/freitagslib/encoding.py b/client-barcode/freitagslib/encoding.py new file mode 100644 index 0000000..0c254ab --- /dev/null +++ b/client-barcode/freitagslib/encoding.py @@ -0,0 +1,35 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright (C) 2011 Sebastian Pipping +# Licensed under GPL v3 or later + +from __future__ import print_function + +def asciify(utf8): + _mapping = ( + ('ö', 'oe'), + ('Ö', 'Oe'), + ('ä', 'ae'), + ('Ä', 'Ae'), + ('ü', 'ue'), + ('Ü', 'Ue'), + ('ß', 'ss'), + ) + _mapping = dict(((ord(unicode(key, 'utf-8')), value) for key, value in _mapping)) + + def subst(unichar): + def fix(unichar): + if ord(unichar) > 127: + return unicode('?') + return unichar + + return _mapping.get(ord(unichar), fix(unichar)) + + unichars = utf8.decode('utf-8') + unitext = ''.join(subst(e) for e in unichars) + return unitext.encode('ascii') + + +if __name__ == '__main__': + print(asciify('Schöfferhofer'))