Hmm... die link heeft me in ieder geval wat wijzer gemaakt. De code "print locale.getlocale()[1]" geeft
1252. En in die tabel staat bij het euro-teken '20AC', zoals ik in mijn string.replace() heb gebruikt. Nu begrijp ik in ieder geval al iets meer.
Het werkt, maar waarschijnlijk niet op alle systemen die in omloop zijn (want je vervangt maar één symbool). Iemand heeft dat hier geanalyseerd:
In principe maakt het niet zoveel uit, omdat alleen mn moeke de applicatie gaat gebruiken om een hoop uren aan administratie te besparen. Vandaar is windows -> NL belangrijk. Ubuntu -> NL uiteraard ook omdat ik de app aan het schrijven ben
Maar het zou sowieso wel mooier zijn om het cross-platform / cross-language te hebben.
Nu heb ik weer even getest met behulp van die link:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import locale,sys
locale.setlocale(locale.LC_ALL, '')
class test(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
print locale.getlocale()[1]
char = locale.localeconv()['currency_symbol'].decode(locale.getlocale()[1])
String = char+locale.currency(10.0,False)
String = QString.fromUtf8(String)
w = QLabel(self)
w.setText(String)
w.show()
app = QApplication(sys.argv)
f = test()
f.show()
sys.exit(app.exec_())
Op Ubuntu werkt dat weer, op windows niet. Ook heb ik zitten kijken naar .encode() maar volgens mij lukt het daar ook niet mee. Ik vind het toch wel een beetje frustrerend dat python dit niet kan. Maar je had het over python 3, die zou het dus wellicht wel juist doen?
Edit:
Opeens kreeg ik een idee. Namelijk zelf de unicode codes definiëren.
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import locale,sys
locale.setlocale(locale.LC_ALL, '')
def currency_symbol(ics=False):
sym = { 'AUD':u'\u0024','BWP':u'\u0050','CAD':u'\u0024','DKK':u'\u006b\u0072','GBP':u'\u00A3',\
'HKD':u'\u0024','EUR':u'\u20AC','NGN':u'\u20a6','PHP':u'\u20b1','USD':u'\u0024',\
'ZAR':u'\u0052','ZWD':u'\u005a\u0024','JPY':u'\u00a5'}
if not ics:
ics = locale.localeconv()['int_curr_symbol'].strip()
if ics in sym:
return sym[ics]
return "?"
class test(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
String = currency_symbol() + locale.currency(10.0,False)
w = QLabel(self)
w.setText(String)
w.show()
app = QApplication(sys.argv)
f = test()
f.show()
sys.exit(app.exec_())
Die code werkt zowel op Windows als op Ubuntu. Daarnaast zijn diverse currency-signs van verschillende landen op te vragen. Als je 'print' gebruikt dan krijg je wel een error (tenzei dat je QString().toAscii() gebruikt), maar Qt kan het wel juist weergeven. Ik denk dat dit de oplossing is, tenzei dat iemand deze laaste code lariekoek vind