Tabelle mit Asci zeichen wie anlegen (besten)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
patrickk

Beitragvon patrickk » Donnerstag 18. August 2005, 08:38

Hallo,

die daten kommen als xml, dann wird der 'text', der als base64 kodiert ist von mir von hex nach binary geaendert. Dafuer habe ich einfach eine Tabelle gemacht "3":"0011". Die Daten schreibe ich alle hintereinander in einen String. Warum. Ich muss es nach GSM 7 bit default alphabet dekodieren. Da habe ich leider nichts gefunden und habe die Tabelle angelegt. Diese hat nur 7 bit, und das erste von dem octet wird hinten an das folgende gehaengt..., also mit jedem schritt vorne ein zeichen mehr streichen und hinten bekommt man mehr angehaengt... Aber das klappt alles. Danach benutze ich die tabelle um den 7 bit das passende zeichen zuzuordnen. Bei den normalen Buchstaben ist das auch kein Problem. Aber bei z.b. dem sect sign. Ich moechte die Daten als utf-8 in eine Datei schreiben. Habe die zuordnung so gemacht:
"0010100":u'f'.
Probleme bereitet das natuerlich bei allen Zeichen die ein ' beinhalten.
patrickk

Beitragvon patrickk » Donnerstag 18. August 2005, 08:39

Hallo,

die daten kommen als xml, dann wird der 'text', der als base64 kodiert ist von mir von hex nach binary geaendert. Dafuer habe ich einfach eine Tabelle gemacht "3":"0011". Die Daten schreibe ich alle hintereinander in einen String. Warum. Ich muss es nach GSM 7 bit default alphabet dekodieren. Da habe ich leider nichts gefunden und habe die Tabelle angelegt. Diese hat nur 7 bit, und das erste von dem octet wird hinten an das folgende gehaengt..., also mit jedem schritt vorne ein zeichen mehr streichen und hinten bekommt man mehr angehaengt... Aber das klappt alles. Danach benutze ich die tabelle um den 7 bit das passende zeichen zuzuordnen. Bei den normalen Buchstaben ist das auch kein Problem. Aber bei z.b. dem sect sign. Ich moechte die Daten als utf-8 in eine Datei schreiben. Habe die zuordnung so gemacht:
"0010100":u'f'.
Probleme bereitet das natuerlich bei allen Zeichen die ein ' beinhalten.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 08:44

Aha, das hört sich entlich mal interessant an ;)

Also du willst deine Zuordnungstabelle in eine Datei festhalten??? Dafür könntest du doch pickle nehmen.
Beim öffnen einer Datei kannst du ein encoding festlegen, z.B.:

Code: Alles auswählen

f = file( "test.txt", "wb", encoding="utf-8" )


Wenn du diese Datei in einem Editor öffnest, mußt du darauf achten, das er die Datei auch mit UTF-8 Darstellt! Ansonsten hast du fehlerhaft aussehende Daten!

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
patrickk

Beitragvon patrickk » Donnerstag 18. August 2005, 08:58

Hallo,

ich erstelle die Datei selbst in die ich den Inhalt schreibe. Da hast Du mir aber schon einen hilfreichen Tipp gegeben.
so mache ich es. final ist hierbei der string aus den Zeichen nach der tabelle. Also: u'I'+u'c'+u'h'
f.write(codecs.BOM_LE)
final_utf=final.encode("UTF-8")
f.write(final_utf)
Sollte das so korrekt sein? Die encode utf zeile ist vielleicht unnoetig.
Mein Problem sind eher Zeichen wie: §
Habe aus Office, Sonderzeichentabelle, die Zeichen in meine Tabelle kopiert. Aber da meckert er. Ich glaube, dass das Zeichen irgendwie in einer darstellung mit ' gesehen wird. Damit macht: "1001010":u'A'' nat. ein problem. Was mache ich da am besten?


Danke,


Patrick
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 09:01

Kannst du nicht mal deinen ganze Source-Code posten? Wird ja nicht so viel sein... Ich denke dann kann man dir besser folgen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
patrickk

Beitragvon patrickk » Donnerstag 18. August 2005, 09:03

habe gerade das § Zeichen in die Tabelle gestellt und bekomme diese Fehlermeldung:

line 39
"1011011":u'AD',"1011100":u'AV',"1011101":u'AQ',"1011110":u'A\',"1011111":u'A'',"1100101":u'e',
^
SyntaxError: invalid syntax

1011111 wird hier wegen dem '' glaube ich falsch. Wie mache ich hier am besten die Zuordnung?

sorry, bin noch neu in python und das iso... Latin utf bereitet mir noch grosse Probleme...
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 09:08

Erstmal aufräumen:

table = {
"1011011":u'AD',
"1011100":u'AV',
"1011101":u'AQ',
"1011110":u'A\',
"1011111":u'A'',
"1100101":u'e',
}

Die beiden Zeilen sind natürlich das Problem:
"1011110":u'A\',
"1011111":u'A'',

Ist auch klar, bei \ ein Sonderzeichen ist, welches escapted werden muß. Außerdem ist die "Klammer" falsch. So geht's richtig:
"1011110":u'A\\',
"1011111":u"A'",

Allerdings, was soll denn ein A\ und ein A' sein???

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 09:10

Ach, du wandelst base64 nach hex, dann hex nach binär und dann binär zu echte Zeichen???

Warum der Umweg? Kannst doch auch eine Tabelle mit hex nach binär, oder so, machen...
Zuletzt geändert von jens am Donnerstag 18. August 2005, 09:27, insgesamt 2-mal geändert.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
patrickk
User
Beiträge: 31
Registriert: Donnerstag 18. August 2005, 09:07

Beitragvon patrickk » Donnerstag 18. August 2005, 09:27

Hi,


der Umweg, da ich die Decodierung selber gemacht habe. GSM 7 bit gibt es leider nicht (das ich wuesste...)
7bit zu zeichen. Ist nicht die ascii tabelle...
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 09:28

Zum bessen verständniss, dessen was du genau machst, schreib doch einfach mal einen Kleinen Ablaufplan, Stück für Stück.

Ich fang mal an:

- Daten von GSM als XML erhalten
- base64 Daten aus XML extrahieren
- extrahierte Daten nach hex wandeln
- hex nach binär wandeln
- binär nach ascii wandeln
- Daten in Datei schreiben

Verbesser das mal...
Also die base64 Daten sind in GSM-7bit codiert, oder was?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
patrickk
User
Beiträge: 31
Registriert: Donnerstag 18. August 2005, 09:07

Beitragvon patrickk » Donnerstag 18. August 2005, 10:01

- Daten von GSM als XML erhalten
- (base64 Daten) aus XML extrahieren durch pickle.dumps ist es bereits decodiert...
- extrahierte Daten nach hex wandeln
- hex nach binär wandeln
- binär nach eigener Tabelle in entsprechende Zeichen wandeln (habe u'' verwendet)
- Daten in Datei schreiben (utf-8)

Problem: nur ein paar Zeichen in der Tabelle. Wie kann ich z.B. dieses Zeichen setzen:
?, oder ?...
Kennt jmd. den character von denen? oder eine Seite, wo ich die finden kann... und wie gibt man so ein zeichen ein, wenn man es gefunden hat. z.b. iso 8859-1 character set...

Wie kann ich sagen: a = '/xa5' als latin deuten, aber als utf-8 richtig speichern?
Am besten waere wohl eine komplette utf-8 tabelle. Alles was da nicht drinnen ist kann ich auch nicht speichern... oder?
Weiss jmd wo es so eine seite gibt?


patrick
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 10:14

patrickk hat geschrieben:- (base64 Daten) aus XML extrahieren durch pickle.dumps ist es bereits decodiert...


Also das verstehe ich überhaupt nicht... Wie können base64 Daten durch pickle.dumps decodiert werden??? Das macht für mich absolut keinen Sinn.

patrickk hat geschrieben: - extrahierte Daten nach hex wandeln
- hex nach binär wandeln
- binär nach eigener Tabelle in entsprechende Zeichen wandeln (habe u'' verwendet)

OK, "extrahierte Daten nach hex wandeln" machst du also mit binascii.b2a_hex()
Aber die beisen weiteren Schritte erscheinen mir nicht optimal gelöst zu sein.
Warum erstellst du nicht eine hex<->Zeichen Tabelle??? Warum der Umweg über binär-Code???



patrickk hat geschrieben:Problem: nur ein paar Zeichen in der Tabelle. Wie kann ich z.B. dieses Zeichen setzen:
?, oder ?...
Kennt jmd. den character von denen? oder eine Seite, wo ich die finden kann...

Schau mal auf http://decodeunicode.org nach.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Donnerstag 18. August 2005, 10:19

Hi

Zeig uns mal die ursprungsdaten, sag uns in welchem format die sind und in welchem format du sie haben möchtest ganz am schluss.

Gruss
patrickk
User
Beiträge: 31
Registriert: Donnerstag 18. August 2005, 09:07

Beitragvon patrickk » Donnerstag 18. August 2005, 10:41

Hi,

nein ich habe eine selbst erstellte tabelle, die einfach zeichen setzt. diese werden als in einen string konvertiert und dann in eine utf-8 datei geschrieben. Das hat mit xml... nichts zu tun. Weiss nur nicht wie ich manche Zeichen anlegen soll. BSP. z.b. findet man in der ascii tabelle ein ü. wie kann man das speichern?

>>> a ="ü"
>>> b =a.decode( "latin1" ).encode( "utf8" )
>>> b
'\xc3\x83\xc2\xbc'
>>> print (b)
ü

egal was ich mache, es kommt nie das Zeichen wieder raus?
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 18. August 2005, 10:46

patrickk hat geschrieben:egal was ich mache, es kommt nie das Zeichen wieder raus?


Das liegt allerdings wahrscheinlich daran, das dein Editor/Shell keine UTF8 unterstützung an hat! Denn ü sieht für mich nach einem UTF8 kodiertes Zeichen aus, welches nur nicht als solches Dargestellt wird!

Schreib das Zeichen mal in eine Datei rein. Diese dann im SciTE öffnen und dann unter File/Encoding auf UTF8 stellen... Dann solltest du wieder ein "ü" sehen...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder