Nicht erkannte Zeichen werden als ? dargestellt, jedoch nicht so behandelt

DrMueller

Erfahrenes Mitglied
Hallo Leute,
folgendes Problem: Ein Kunde erhält regelmässig kyrilische Emails mit eben so geschriebnen Dateianhängen.
Bei den Dateianhängen haben wir das Problem, dass der Text nicht erkennbar ist, daher haben wir beschlossen, dass bei solchen Attachment-Namen einfach unsere Beschriftung verwendet wird un diese ggf. vom Kunden nachträglich geändert werden kann.

Da wir etwas unter Zeitdruck stehen, wird die Holzhammer Methode verwendet: Zeichen auslesen und falls ein Rest an korrekten Zeichen übrig bleibt, diesen als Dateinamen verwenden, sonst eben unsere Beschriftung.

Ein Name sieht ca. so aus:

ontract ?-? 11? 21.10.09.rtf

Nun hätte ich einfach ein replace auf Fragezeichen, Punkte und Leerzeichen gemacht, doch die Fragezeichen werden nicht als solche erkannt.

Hier zum Beispiel die Ausgabe aus dem Direktfenster:

?dateiname
?ontract ?-? 11? 21.10.09.rtf
? Replace(dateiname, chr(63), "")
?ontract ?-? 11? 21.10.09.rtf

Habt ihr eine Idee, wie ich solche Zeichen rausfiltern kann? Habs über kompilierte Wege versucht, aber wirklich sauber arbeiten tut nichts.
 

tombe

Erfahrenes Mitglied
Da auch dann wenn man diese Zeichen filtern kann nichts gescheites rauskommt, warum macht ihr euch dann die Arbeit. Benennt die Dateien doch einfach irgendwie anders und gut.
Ihr habt ein Problem gelöst und der Kunde kann die Dateien umbenennen wenn er will und ist auch zufrieden.

Wobei ich diese Woche ein ähnliches Problem in Excel hatte wo ein Zeilenumbruch nicht ausgeführt dafür aber angezeigt wurde und der sollte entfernt werden. Ich musste "AltGr + 0100" eingeben um nach dem Zeichen zu suchen und es zu ersetzen. So etwas in der Art wird es dann bei dir auch sein.

Vielleicht findest du ja hier etwas: http://mandalex.manderby.com/a/ascii.php
 
Zuletzt bearbeitet:

Yaslaw

alter Rempler
Moderator
Code:
?Replace("ontract ?-? 11? 21.10.09.rtf", Chr(63), "")
ontract - 11 21.10.09.rtf

Es funktioniert in Theorie. Die Frage ist, sind die ? wirklich ? (also chr(63)) oder stehen sie für ein komisches Zeichen?
Versuch mal das Zeichen zu kopieren und mit asc() den Wert herauszulesen. Ist es auch 63?
 

vfl_freak

Premium-User
Code:
?Replace("ontract ?-? 11? 21.10.09.rtf", Chr(63), "")
ontract - 11 21.10.09.rtf
Es funktioniert in Theorie. Die Frage ist, sind die ? wirklich ? (also chr(63)) oder stehen sie für ein komisches Zeichen?
Versuch mal das Zeichen zu kopieren und mit asc() den Wert herauszulesen. Ist es auch 63?

Richtig, ich würde auch ganz stark vermuten, dass nicht um ein "echtes" Fragezeichen handelt, sondern einfach um einen system-spezifischen Platzhalter für ein nicht darstellbares Zeichen! In einer Java-Entwicklungsumgebung sind dies dann bspw. kleine Kästchen.

Also wird u. U. jedes der '?' einen anderen ASCII-Wert haben ....

Bleibt die Frage, ob das vorgeschlagene pauschale Umbenennen geht, wenn man hierdurch nicht den genauen Dateinamen kennt ....

Gruß
Klaus
 

Yaslaw

alter Rempler
Moderator
Ansonsten mit Regulären Ausdrücken

für VB6 sieht das etwa so aus
Visual Basic:
Public Function test()
    Const C_PATTERN = "[^0-9a-zA-Z._-]"
    Const C_REPLACE = ""
    Dim regEx As Object
    Dim value, pattern, replace As String
    
    'Testfall
    value = "ontract ?-? 11? 21.10.09.rtf"
    
    'RegExp Object anlegen
    Set regEx = CreateObject("vbscript.regexp")

    regEx.Global = True
    regEx.pattern = C_PATTERN
    test = regEx.replace(value, C_REPLACE)

    'RegExp Objekt zerstören
    Set regEx = Nothing
End Function
 
Zuletzt bearbeitet:

DrSoong

Iss was, Doc!
Mir stellt sich die Frage, ob hier nicht eine andere Codierung (UTF, ISO, ...) sinnvoller wäre, wahrscheinlich wurden die Mails/Texte mit einer bestimmten, anderer als deiner Codierung gesendet und daher kommen die Darstellungsprobleme.


Der Doc!
 

DrMueller

Erfahrenes Mitglied
Hallo Leute, vielen Dank für die vielen Antworten.
Im ersten Schritt werde ich es wohl über die Reg Exp lösen müssen. Vielleicht gibts noch was sauberes, die verschiedenen Kodierungen etc. durchlaufen lassen z.B., aber das muss hinten anstehen.