Sonderzeichen im string
Verfasst: Donnerstag 4. August 2011, 15:28
Hallo allerseits,
ich darf mich seit gestern mit Python beschäftigen und darin ein kleines Programm schreiben. Bisher hab ich nur C++ gelernt, aber man findet sich zum Glück relativ schnell zurecht.
Bevor ich zu meinem Problem komm, will ich euch erstmal die Aufgabenstellung beschreiben.
Zusammengefasst: Dass Programm soll aus einer Excel Tabelle USt-IDs auslesen und überprüfen. Die Überprüfung läuft Online über eine XML Schnittstelle (siehe: http://evatr.bff-online.de/eVatR/xmlrpc/)
Das klappt soweit auch wunderbar, jedoch habe ich das Problem, dass sobald Sonderzeichen im Namen der Firma oder in der Adresse drinnen sind, das Programm Fehlermeldungen ausspuckt. Ich hab mich da auch schonmal informiert und bin dazu gekommen, dass es wohl an dem Unicode string liegt.
Jetzt ist meine Frage: Was muss ich an meinem Code ändern damit das Problem nicht mehr auftritt?
Vielen Dank für eure Hilfe
Ergänzung: Das Problem liegt nicht an der Übertragung zum Server, da sind die Sonderzeichen (sind in meinem Fall sowas wie ß,ö,ä,ü,á,à,ê, aber auch bei ,.(also Punkt und Komma)) ok, sondern wenn der Hash der zurück kommt aufbereitet werden soll...
Edit:
Hier ist noch die Fehlermeldung:
ich darf mich seit gestern mit Python beschäftigen und darin ein kleines Programm schreiben. Bisher hab ich nur C++ gelernt, aber man findet sich zum Glück relativ schnell zurecht.
Bevor ich zu meinem Problem komm, will ich euch erstmal die Aufgabenstellung beschreiben.
Zusammengefasst: Dass Programm soll aus einer Excel Tabelle USt-IDs auslesen und überprüfen. Die Überprüfung läuft Online über eine XML Schnittstelle (siehe: http://evatr.bff-online.de/eVatR/xmlrpc/)
Das klappt soweit auch wunderbar, jedoch habe ich das Problem, dass sobald Sonderzeichen im Namen der Firma oder in der Adresse drinnen sind, das Programm Fehlermeldungen ausspuckt. Ich hab mich da auch schonmal informiert und bin dazu gekommen, dass es wohl an dem Unicode string liegt.
Jetzt ist meine Frage: Was muss ich an meinem Code ändern damit das Problem nicht mehr auftritt?
Vielen Dank für eure Hilfe
Ergänzung: Das Problem liegt nicht an der Übertragung zum Server, da sind die Sonderzeichen (sind in meinem Fall sowas wie ß,ö,ä,ü,á,à,ê, aber auch bei ,.(also Punkt und Komma)) ok, sondern wenn der Hash der zurück kommt aufbereitet werden soll...
Code: Alles auswählen
import xmlrpclib
server_url = 'http://evatr.bff-online.de/' # 'https://...' bei SSL-Verschlüsselung
server = xmlrpclib.Server(server_url)
# Tabelle öffnen
from xlrd import open_workbook,XL_CELL_TEXT
book = open_workbook('nurUSt-ID.xls')
sheet = book.sheet_by_index(0)
# Ende der Tabelle finden
j = 0
while True:
j = j+1
a = sheet.cell_value(j,0)
if a == 'ENDE':
print 'Es werden', j ,'USt-IDs geprüft'
break
for i in range(1,j,1):
#daten zum testen
UstId_2 = sheet.cell_value(i,26)
if UstId_2[:2] == 'DE':
UstId_1 = '0'
else: UstId_1 = 'DE123456789'
Firmenname = sheet.cell_value(i,7)
Ort = sheet.cell_value(i,14)
#PLZ vorbereiten, da als Zahl erkannt und dann immer 12345.0 rauskommt
PLZ = sheet.cell_value(i,12) #Aus Tabelle auslesen
PLZ = str (PLZ) #In String umwandeln
PLZ = PLZ[:-2] #.0 abschneiden
Strasse = sheet.cell_value(i,10)
Druck = 'nein'
rpc = server.evatrRPC(UstId_1, UstId_2, Firmenname, Ort, PLZ, Strasse, Druck)
#print rpc
rpc = xmlrpclib.loads(rpc)
rpc = rpc[0]
t = {}
for item in rpc:
t[item[0]] = item[1]
if t['ErrorCode'] == '200':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist gültig.'
print
elif t['ErrorCode'] == '201':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist ungültig.'
print
elif t['ErrorCode'] == '202':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist ungültig. Sie ist nicht in der Unternehmerdatei des betreffenden EU-Mitgliedstaates registriert.'
print
elif t['ErrorCode'] == '203':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist ungültig. Sie ist erst ab dem ',t['Gueltig_ab'],' gültig.'
print
elif t['ErrorCode'] == '204':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist ungültig. Sie war im Zeitraum von ',t['Gueltig_ab'],' bis' ,t['Gueltig_bis'],' gültig.'
print
elif t['ErrorCode'] == '205':
print t['Firmenname']
print 'Ihre Anfrage kann derzeit durch den angefragten EU-Mitgliedstaat oder aus anderen Gründen nicht beantwortet werden. Bitte versuchen Sie es später noch einmal. Bei wiederholten Problemen wenden Sie sich bitte an das Bundeszentralamt für Steuern - Dienstsitz Saarlouis.'
print
elif t['ErrorCode'] == '206':
print t['Firmenname']
print 'Ihre deutsche USt-IdNr. ist ungültig. Eine Bestätigungsanfrage ist daher nicht möglich. Den Grund hierfür können Sie beim Bundeszentralamt für Steuern - Dienstsitz Saarlouis - erfragen.'
print
elif t['ErrorCode'] == '207':
print t['Firmenname']
print 'Ihnen wurde die deutsche USt-IdNr. ausschliesslich zu Zwecken der Besteuerung des innergemeinschaftlichen Erwerbs erteilt. Sie sind somit nicht berechtigt, Bestätigungsanfragen zu stellen.'
print
elif t['ErrorCode'] == '208':
print t['Firmenname']
print 'Für die von Ihnen angefragte USt-IdNr. läuft gerade eine Anfrage von einem anderen Nutzer. Eine Bearbeitung ist daher nicht möglich. Bitte versuchen Sie es später noch einmal.'
print
elif t['ErrorCode'] == '209':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist ungültig. Sie entspricht nicht dem Aufbau der für diesen EU-Mitgliedstaat gilt.'
print
elif t['ErrorCode'] == '210':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist ungültig. Sie entspricht nicht den Prüfziffernregeln die für diesen EU-Mitgliedstaat gelten.'
print
elif t['ErrorCode'] == '211':
print t['Firmenname']
print 'Die Abfrage einer deutschen USt-IdNr. ist nicht möglich.'
print
elif t['ErrorCode'] == '212':
print t['Firmenname']
print 'Die angefragte USt-IdNr. ist ungültig. Sie enthält ein unzulässiges Länderkennzeichen.'
print
elif t['ErrorCode'] == '213':
print t['Firmenname']
print 'Die Abfrage einer deutschen USt-IdNr. ist nicht möglich.'
print
#elif t['ErrorCode'] == '214':
# print 'Ihre deutsche USt-IdNr. ist fehlerhaft. Sie beginnt mit DE gefolgt von 9 Ziffern.'
elif t['ErrorCode'] == '215':
print t['Firmenname']
print 'Ihre Anfrage enthält nicht alle notwendigen Angaben für eine einfache Bestätigungsanfrage (Ihre deutsche USt-IdNr. und die ausl. USt-IdNr.). Ihre Anfrage kann deshalb nicht bearbeitet werden.'
print
elif t['ErrorCode'] == '216':
print t['Firmenname']
print 'Ihre Anfrage enthält nicht alle notwendigen Angaben für eine qualifizierte Bestätigungsanfrage (Ihre deutsche USt-IdNr., die ausl. USt-IdNr., Firmenname einschl. Rechtsform und Ort). Es wurde eine einfache Bestätigungsanfrage durchgeführt mit folgenden Ergebnis: Die angefragte USt-IdNr. ist gültig. '
print
elif t['ErrorCode'] == '217':
print t['Firmenname']
print 'Bei der Verarbeitung der Daten aus dem angefragten EU-Mitgliedstaat ist ein Fehler aufgetreten. Ihre Anfrage kann deshalb nicht bearbeitet werden.'
print
elif t['ErrorCode'] == '218':
print t['Firmenname']
print 'Eine qualifizierte Bestätigung ist zur Zeit nicht möglich. Es wurde eine einfache Bestätigungsanfrage mit folgendem Ergebnis durchgeführt: Die angefragte USt-IdNr. ist gültig.'
print
elif t['ErrorCode'] == '219':
print t['Firmenname']
print 'Bei der Durchführung der qualifizierten Bestätigungsanfrage ist ein Fehler aufgetreten. Es wurde eine einfache Bestätigungsanfrage mit folgendem Ergebnis durchgeführt: Die angefragte USt-IdNr. ist gültig.'
print
elif t['ErrorCode'] == '220':
print t['Firmenname']
print 'Bei der Anforderung der amtlichen Bestätigungsmitteilung ist ein Fehler aufgetreten. Sie werden kein Schreiben erhalten.'
print
elif t['ErrorCode'] == '999':
print t['Firmenname']
print 'Eine Bearbeitung Ihrer Anfrage ist zurzeit nicht möglich. Bitte versuchen Sie es später noch einmal.'
print
Edit:
Hier ist noch die Fehlermeldung:
Traceback (most recent call last):
File "C:\Users\Benutzer\Desktop\Python Zeugs\fertig\USt-ID prüfen fertig.py", line 43, in <module>
rpc = xmlrpclib.loads(rpc)
File "C:\Python27\lib\xmlrpclib.py", line 1135, in loads
p.feed(data)
File "C:\Python27\lib\xmlrpclib.py", line 557, in feed
self._parser.Parse(data, 0)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 1917: ordinal not in range(128)