staging.inyokaproject.org

Spezielle Zeichen aus EXIF-Daten entfernen um für Pluma lesbar zu machen

Status: Gelöst | Ubuntu-Version: Xubuntu 22.04 (Jammy Jellyfish)
Antworten |

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3849

wie schon beschrieben hänge bitte mal Beispieldateien an.

Geht nicht so leicht, sind höchstpersönliche Daten vermerkt

Nutze uchardet oder file um die Dateien zu analysieren

Bringt nicht viel.

file I1000000
I1000000: DICOM medical imaging data

Das ist auch so klar.

uchardet I1000000
unknown

Bringt auch nichts.

du wirst sehen, das exiftool dir wenn notwendig UTF8 auswirft

Ja, exiftool verwendent, wenn nichts angeben UTF-8

-IPTC:CodedCharacterSet=

grep "wandelt" den utf8 input von exiftool um in ASCII Text

Ok, damit macht es vom Ergebnis ähnliches wie

iconv -c -f ISO-IR-100 -t ASCII//TRANSLIT

Das ist natürlich alles nur Mutmaßung, da ich kein Pluma habe

Nachdem medit nicht mehr läuft, ist Pluma für mich bei den Editoren der beste Kompromiss. In diesem Fall geht es aber um was anderes, wenn ich die Metadaten weitergeben will, dann sollen die problemlos lesbar sein und für die Praxis ist die Lösung ja die iconv-Pipe.

Ich frage mich was das für spezielle Zeichen sein könnten, ist ja nur 1, vielleicht ein Feldtrenner?

oder mindestens die Rückgabe von z.B. uchardet sowohl für die Datei, welche funktioniert und für jene, welche nicht funktioniert.

exiftool -G -H -a I1000000 | grep "Start Of Item" > test-charset.txt
grep: (Standardeingabe): Übereinstimmungen in Binärdatei
file test-charset.txt 
test-charset.txt: ASCII text
uchardet test-charset.txt 
ASCII

Ich denke wir kommen nicht weiter. Die Original-Datei kann ich aus Datentschutzgründen keinesfalls posten. Ich setze auf gelöst.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

glaskugel schrieb:

exiftool -G -H -a I1000000 > test-charset.txt

Lass uchardet doch mal über die erzeugte Datei test-charset.txt laufen (wobei das soweit ich wieß keine verunfallten Doppelencodierungen erkennten kann) oder übergebe die Ausgabe von exiftool -G -H -a I100000 an einen Hex-Viewer wie xxd, so dass man die einzelnen Bytes für die Zeilen sehen kann - also z.B.:

xxd -g 1 test-charset.txt 

Und kürze das dann auf die relevanten Stellen ein (das ist valides UTF-8 und man kann es daher einfach aus dem Terminal kopieren).

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3849

exiftool -G -H -a I1000000 > test-charset.txt
uchardet test-charset.txt 
WINDOWS-1252
file test-charset.txt 
test-charset.txt: ISO-8859 text

Interessant, unterschiedliche Ergebnisse.

oder übergebe die Ausgabe von exiftool

00002380: 20 20 20 2d 20 53 74 61 72 74 20 4f 66 20 49 74     - Start Of It
00002390: 65 6d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  em              
000023a0: 20 20 20 20 20 3a 20 40 2e 4c 4f 2e 63 34 30 34       : @.LO.c404
000023b0: 61 62 64 20 40 2e 53 48 2e 63 34 30 34 61 62 64  abd @.SH.c404abd
000023c0: 20 40 2e 2e 53 48 2e 32 30 32 34 30 33 30 34 30   @..SH.202403040
000023d0: 37 36 31 0a 5b 44 49 43 4f 4d 5d 20 20 20 20 20  761.[DICOM]     
000023e0: 20 20 20 20 20 20 20 20 20 2d 20 43 6f 6e 66 69           - Confi
000023f0: 64 65 6e 74 69 61 6c 69 74 79 20 43 6f 64 65 20  dentiality Code 
00002400: 20 20 20 20 20 20 20 20 20 20 20 3a 20 4e 0a 5b             : N.[
00002410: 44 49 43 4f 4d 5d 20 20 20 20 20 20 20 20 20 20  DICOM]          
00002420: 20 20 20 20 2d 20 49 63 6f 6e 20 49 6d 61 67 65      - Icon Image
00002430: 20 53 65 71 75 65 6e 63 65 20 20 20 20 20 20 20   Sequence       
00002440: 20 20 20 20 20 20 3a 20 0a 5b 44 49 43 4f 4d 5d        : .[DICOM]
00002450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20                - 
00002460: 53 74 61 72 74 20 4f 66 20 49 74 65 6d 20 20 20  Start Of Item   
00002470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00002480: 3a 20 28 42 69 6e 61 72 79 20 64 61 74 61 20 34  : (Binary data 4
00002490: 32 31 30 20 62 79 74 65 73 2c 20 75 73 65 20 2d  210 bytes, use -
000024a0: 62 20 6f 70 74 69 6f 6e 20 74 6f 20 65 78 74 72  b option to extr
000024b0: 61 63 74 29 0a 5b 44 49 43 4f 4d 5d 20 20 20 20  act).[DICOM]    
000024c0: 20 20 20 20 20 20 20 20 20 20 2d 20 53 74 61 72            - Star
000024d0: 74 20 4f 66 20 49 74 65 6d 20 20 20 20 20 20 20  t Of Item       
000024e0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 a3 2e              : ..
000024f0: 2e 4c 4f 2e 45 4c 53 43 49 4e 54 31 a3 2e 39 2e  .LO.ELSCINT1..9.
00002500: 55 4c 2e 3d a3 2e c1 2e 4c 4f 2e 63 61 72 65 76  UL.=....LO.carev
00002510: 75 65 5f 47 4e a3 2e c2 2e 43 53 2e 46 41 53 54  ue_GN....CS.FAST
00002520: 5f 4e 45 54 a3 2e c3 2e 43 53 2e 53 45 43 55 52  _NET....CS.SECUR
00002530: 45 44 5f 43 4f 4e 20 a3 2e c4 2e 4c 4f 2e 31 39  ED_CON ....LO.19
00002540: 32 2e 31 36 38 2e 33 39 2e 31 30 20 a3 2e c5 2e  2.168.39.10 ....
00002550: 4c 4f 2e 32 32 31 30 34 20 a3 2e c8 2e 41 45 2e  LO.22104 ....AE.
00002560: 63 61 72 65 76 75 65 46 49 52 a3 2e c9 2e 43 53  carevueFIR....CS
00002570: 2e 4e 20 a3 2e cc 2e 4c 4f 2e 31 2e 30 2e 30 2e  .N ....LO.1.0.0.
00002580: 30 0a 5b 44 49 43 4f 4d 5d 20 20 20 20 20 20 20  0.[DICOM]       
00002590: 20 20 20 20 20 20 20 2d 20 53 74 61 72 74 20 4f         - Start O
000025a0: 66 20 49 74 65 6d 20 20 20 20 20 20 20 20 20 20  f Item          
000025b0: 20 20 20 20 20 20 20 20 20 3a 20 a3 2e 2e 4c 4f           : ...LO
000025c0: 2e 45 4c 53 43 49 4e 54 31 a3 2e 39 2e 55 4c 2e  .ELSCINT1..9.UL.
000025d0: 3d a3 2e c1 2e 4c 4f 2e 63 61 72 65 76 75 65 5f  =....LO.carevue_
000025e0: 47 4e a3 2e c2 2e 43 53 2e 46 41 53 54 5f 4e 45  GN....CS.FAST_NE
000025f0: 54 a3 2e c3 2e 43 53 2e 53 45 43 55 52 45 44 5f  T....CS.SECURED_
00002600: 43 4f 4e 20 a3 2e c4 2e 4c 4f 2e 31 39 32 2e 31  CON ....LO.192.1
00002610: 36 38 2e 33 39 2e 31 30 20 a3 2e c5 2e 4c 4f 2e  68.39.10 ....LO.
00002620: 32 32 31 30 34 20 a3 2e c8 2e 41 45 2e 63 61 72  22104 ....AE.car
00002630: 65 76 75 65 46 49 52 a3 2e c9 2e 43 53 2e 4e 20  evueFIR....CS.N 
00002640: a3 2e cc 2e 4c 4f 2e 31 2e 30 2e 30 2e 30 0a 5b  ....LO.1.0.0.0.[
00002650: 44 49 43 4f 4d 5d 20 20 20 20 20 20 20 20 20 20  DICOM]          
00002660: 20 20 20 20 2d 20 53 74 61 72 74 20 4f 66 20 49      - Start Of I
00002670: 74 65 6d 20 20 20 20 20 20 20 20 20 20 20 20 20  tem             
00002680: 20 20 20 20 20 20 3a 20 a3 2e 2e 4c 4f 2e 45 4c        : ...LO.EL
00002690: 53 43 49 4e 54 31 a3 2e 39 2e 55 4c 2e 3d a3 2e  SCINT1..9.UL.=..
000026a0: c1 2e 4c 4f 2e 63 61 72 65 76 75 65 5f 47 4e a3  ..LO.carevue_GN.
000026b0: 2e c2 2e 43 53 2e 46 41 53 54 5f 4e 45 54 a3 2e  ...CS.FAST_NET..
000026c0: c3 2e 43 53 2e 53 45 43 55 52 45 44 5f 43 4f 4e  ..CS.SECURED_CON
000026d0: 20 a3 2e c4 2e 4c 4f 2e 31 39 32 2e 31 36 38 2e   ....LO.192.168.
000026e0: 33 39 2e 31 30 20 a3 2e c5 2e 4c 4f 2e 32 32 31  39.10 ....LO.221
000026f0: 30 34 20 a3 2e c8 2e 41 45 2e 63 61 72 65 76 75  04 ....AE.carevu
00002700: 65 46 49 52 a3 2e c9 2e 43 53 2e 4e 20 a3 2e cc  eFIR....CS.N ...
00002710: 2e 4c 4f 2e 31 2e 30 2e 30 2e 30 0a 5b 44 49 43  .LO.1.0.0.0.[DIC
00002720: 4f 4d 5d 20 20 20 20 20 20 20 20 20 20 20 20 20  OM]             
00002730: 20 2d 20 50 69 78 65 6c 20 44 61 74 61 20 20 20   - Pixel Data   
00002740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
00002750: 20 20 20 3a 20 28 42 69 6e 61 72 79 20 64 61 74     : (Binary dat
00002760: 61 20 35 32 34 32 38 38 20 62 79 74 65 73 2c 20  a 524288 bytes, 
00002770: 75 73 65 20 2d 62 20 6f 70 74 69 6f 6e 20 74 6f  use -b option to
00002780: 20 65 78 74 72 61 63 74 29 0a 5b 43 6f 6d 70 6f   extract).[Compo
00002790: 73 69 74 65 5d 20 20 20 20 20 20 20 20 20 20 2d  site]          -
000027a0: 20 53 68 75 74 74 65 72 20 53 70 65 65 64 20 20   Shutter Speed  
000027b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
000027c0: 20 3a 20 33 33 30 30 0a                           : 3300.

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1201

glaskugel schrieb:

wie schon beschrieben hänge bitte mal Beispieldateien an.

Geht nicht so leicht, sind höchstpersönliche Daten vermerkt

Nutze uchardet oder file um die Dateien zu analysieren

Bringt nicht viel.

file I1000000
I1000000: DICOM medical imaging data

Das ist auch so klar.

uchardet I1000000
unknown

Bringt auch nichts.

uchardet wendet man auf Text-Dateien an. Mit analysieren meine ich die Textdateien, die aus deinem exiftool kommen und die Pluma zum einen öffnen und zum anderen nicht öffnen kann. Weiterführende Analyse wie seahawk1986 schon schrieb mittels Hex Viewer.

Ich frage mich was das für spezielle Zeichen sein könnten, ist ja nur 1, vielleicht ein Feldtrenner?

oder mindestens die Rückgabe von z.B. uchardet sowohl für die Datei, welche funktioniert und für jene, welche nicht funktioniert.

exiftool -G -H -a I1000000 | grep "Start Of Item" > test-charset.txt
grep: (Standardeingabe): Übereinstimmungen in Binärdatei
file test-charset.txt 
test-charset.txt: ASCII text
uchardet test-charset.txt 
ASCII

Und diese Datei (test-charset.txt) die ganz klar ASCII-Text ist kann Pluma nicht öffnen?

Ich denke wir kommen nicht weiter. Die Original-Datei kann ich aus Datentschutzgründen keinesfalls posten. Ich setze auf gelöst.

Vielleicht wäre es ein gangbarer Weg eine freie DICOM Datei aus dem Netz zu nehmen, mit welcher du deinen Fall reproduzieren kannst.

Gruß SH

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3849

Könnte sein, dass du mein Posting mit dem Hex-Block nicht gesehen hat.

Und diese Datei (test-charset.txt) die ganz klar ASCII-Text ist kann Pluma nicht öffnen?

Kommt darauf an, wie die Datei erstellt wurde. Ich habe immer davor den Befehl angegeben wie die txt-Datei erstellt wurde.

Man kann Pluma zwingen eine bestimmte Kodierung zu verwenden, Die merkt sich Pluma auch dann, waren nicht sehr viele Möglichkeiten angegeben, erhalte die Auswahl nicht mehr. Ich habe ISO 8859-15 testweise erzwungen, war 1 der wenigen Möglichkeiten. So wird es angezeigt. Mir ging es aber darum, dass die Datei jeder ohne Klimmzüge lesen kann. Ich weiß ja nicht welche Software der Arzt verwendet. Hatte kürzlich ein Erlebnis beim Arzt, das man einfach so akzeptieren muss. Arzt 1 will eine Txt-Datei per Email und keine PDF-Datei, weil nicht lesbar, bei Arzt 2 ist es genau umgekehrt. Eine Praxis druckt die Datei aus und scannt sie wieder ein. Man richtet sich einfach nach den Gegebenheiten und schweigt 😉

Im Anhang die Fehlermeldung.

Anhang

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6532

Ich weiß nicht, ob dass noch hilft. Ich habe mir den Hexdump mal kurz angesehen.

Was ich da auf die Schnelle gesehen habe ist definitiv kein UTF-8. Die Codierung:

a3 -> 1010 0011

ist kein Startbyte und auch kein Folgebyte, da das vorherige Zeichen ein Leerzeichen war (24fe). Die Bytes c1 und c4 könnten Startbytes sein

c1 -> 1100 0001

es folgt aber nur ein ASCII Punkt und es ist auch keine gültige Anzahl von Folgebytes codiert.

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1201

glaskugel schrieb:

Könnte sein, dass du mein Posting mit dem Hex-Block nicht gesehen hat.

Ich bin zwischenzeitlich essen gewesen und habe dann erst abgesendet und nicht geprüft ob zwischenzeitlich ein neuer Post kam 😢

... ISO 8859-15 ...

Danke für die Info

Im Anhang die Fehlermeldung.

Danke!

Dakuan war hier ja schon schneller ... die Bytes sind mir auch aufgefallen wobei ich a3, c1 und c4 ebenfalls als "Übeltäter" ansehe. Schau dir die Positionen im lesbaren Text an, welche einen Punkt darstellen. 2e und 0A sind "gute" Punkte a3, c1 und c4 sind "schlechten" Punkte. Versuche "schlechten" Punkte zu ermitteln und ersetze sie z.B. durch 2e (bitte nicht durch 0a ersetzen das ist LineFeed). Testen kannst du das z.B. mit https://hexed.it/ ... wenn du hier die "schlechten" HexCodes eingibst, dann steht unten links bei UTF-8 Ungültige Daten.

Das Heraussuchen kann man ggf. automatisieren ... ich weiß leider aktuell nicht wie. 😢 ... nun ja etwas Fleißarbeit und danach sollte es mit Pluma wieder funktionieren. Wenn es funktioniert könnte man wieder mit tr die besagten Bytes löschen bevor die endgültige Textdatei geschrieben wird.

Edit: tr klein geschrieben

sh4711

Anmeldungsdatum:
13. Februar 2011

Beiträge: 1201

@seahawk1986
glaskugel hat wie gewünscht die Ausgabe von xxd gepostet. Wie bekommst du denn nun die Ausgabe in eine Datei, welche die Ursprungsdatei wieder darstellt?

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1303

Ich habe den Hexdump auch kurz analysiert.

$ xxd -r file.hex file.bin			# Erzeuge die Binärdatei aus dem Hexdump
$ sed 's/[\x00]*   /   /g' file.bin >noNul.bin	# lösche die führenden <NUL>
$ uchardet noNul.bin				# Stelle die Codierung fest
WINDOWS-1252
$ iconv -f WINDOWS-1252 -t utf-8 noNul.bin
   - Start Of Item                   : @.LO.c404abd @.SH.c404abd @..SH.202403040761
[DICOM]              - Confidentiality Code            : N
[DICOM]              - Icon Image Sequence             : 
[DICOM]              - Start Of Item                   : (Binary data 4210 bytes, use -b option to extract)
[DICOM]              - Start Of Item                   : £..LO.ELSCINT1£.9.UL.=£.Á.LO.carevue_GN£.Â.CS.FAST_NET£.Ã.CS.SECURED_CON £.Ä.LO.192.168.39.10 £.Å.LO.22104 £.È.AE.carevueFIR£.É.CS.N £.Ì.LO.1.0.0.0
[DICOM]              - Start Of Item                   : £..LO.ELSCINT1£.9.UL.=£.Á.LO.carevue_GN£.Â.CS.FAST_NET£.Ã.CS.SECURED_CON £.Ä.LO.192.168.39.10 £.Å.LO.22104 £.È.AE.carevueFIR£.É.CS.N £.Ì.LO.1.0.0.0
[DICOM]              - Start Of Item                   : £..LO.ELSCINT1£.9.UL.=£.Á.LO.carevue_GN£.Â.CS.FAST_NET£.Ã.CS.SECURED_CON £.Ä.LO.192.168.39.10 £.Å.LO.22104 £.È.AE.carevueFIR£.É.CS.N £.Ì.LO.1.0.0.0
[DICOM]              - Pixel Data                      : (Binary data 524288 bytes, use -b option to extract)
[Composite]          - Shutter Speed                   : 3300
$ 

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

sh4711 schrieb:

@seahawk1986
glaskugel hat wie gewünscht die Ausgabe von xxd gepostet. Wie bekommst du denn nun die Ausgabe in eine Datei, welche die Ursprungsdatei wieder darstellt?

Mit einem kleinen Python-Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/usr/bin/env python3
from pathlib import Path 

converted_lines = []
for line in Path('sample.txt').read_bytes().split(b'\n'):
    if not line: continue # skip empty lines
    _, byte_data, _ = line.replace(b': ', b'  ', 1).split(b'  ', maxsplit=2)
    converted_lines.append(bytes([int(b, 16) for b in byte_data.split(b' ')]))

Path('test.txt').write_bytes(b"".join(converted_lines))

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Alternatives Umwandlungsprogramm, auch Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/usr/bin/env python3

OFFSET = 10
LENGTH = 16 * 3


def main():
    with open("test.txt", "r", encoding="utf-8") as lines:
        with open("test.bin", "wb") as file:
            file.writelines(
                bytes.fromhex(line[OFFSET : OFFSET + LENGTH]) for line in lines
            )


if __name__ == "__main__":
    main()

glaskugel

(Themenstarter)

Anmeldungsdatum:
8. Juli 2010

Beiträge: 3849

Danke und sorry für die späte Reaktion. Es gibt in der Familie zur Zeit einige gesundheitliche Probleme, die Vorrang haben.

Antworten |