Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Umlaute bei defaults read

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 09.07.2012 - 08:27    Titel: Umlaute bei defaults read Antworten mit Zitat

Wenn ich testweise etwas über Defaults schreibe:
Code:
defaults write com.hubionmac.test bla Über

und dann auslese, sind die Sonderzeichen anscheinend octal codiert...
Code:
defaults read com.hubionmac.test bla
=>\334ber


Ist das nur eine Einstellungssache oder gibt es einen schlanken Weg die octal codierten Buchstaben wieder in normale Zeichen umzuwandel?

Einer eine Idee? Confused
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jürgen
•->
•->


Anmeldedatum: 09.07.2012
Beiträge: 15
Wohnort: Langenfeld

BeitragVerfasst am: 09.07.2012 - 17:12    Titel: Vorschlag via Python Antworten mit Zitat

Hatte ein ähnliches Problem mal beim Auslesen von Kennwörtern aus der Keychain mit Security. Da bin ich über Python gegangen. Variante, die hier anscheinend klappt:

Code:
on decode_octal(str)
   set str to quoted form of str
   set cmd to quoted form of "#!/usr/bin/python
import sys

x = sys.argv[1]
x = x.decode('unicode_escape' )
x=x.encode('utf-8')
print x"
   set cmd_full to "python -c " & cmd & " " & str
   set r to do shell script cmd_full
   return r
end decode_octal

set x to "\\334ber"
decode_octal(x)
-->"Über"


Gruß, Jürgen[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 09.07.2012 - 20:54    Titel: Antworten mit Zitat

Code:
perl -e 'binmode STDOUT => ":utf8"; print "\334"'

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 09.07.2012 - 22:47    Titel: Antworten mit Zitat

Herzlichen Dank, beide Lösungen funktionieren super =)!
Applaus
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 03.09.2012 - 23:34    Titel: Antworten mit Zitat

Ich habe gerade gemerkt, dass die perl-Lösung zwar schön kurz ist, aber bei String in der Form bla@fasel.com doch glatt das @fasel.com unterschlägt.
Phyton wins Shocked
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 07.09.2012 - 11:09    Titel: Antworten mit Zitat

hubionmac hat Folgendes geschrieben:
Ich habe gerade gemerkt, dass die perl-Lösung zwar schön kurz ist, aber bei String in der Form bla@fasel.com doch glatt das @fasel.com unterschlägt.
Phyton wins Shocked


Das kommt davon, wenn man nicht weiß, was man da tut. "@" markiert in Perl ein Array. Du wirst ähnliche "Probleme" mit "$" und "%" bekommen.

Zeig mal Deinen Code, dann zeige ich Dir, wie man's richtig macht.
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 07.09.2012 - 11:16    Titel: Antworten mit Zitat

Wohl ehr vergessen wofür ich den Code habe wollte, was...? Wink

do shell script "defaults write com.hubionmac.test bla Über@über.com"

do shell script "defaults read com.hubionmac.test bla"

und jetzt dein Code?
_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 07.09.2012 - 12:11    Titel: Antworten mit Zitat

hubionmac hat Folgendes geschrieben:
Wohl ehr vergessen wofür ich den Code habe wollte, was...? Wink

do shell script "defaults write com.hubionmac.test bla Über@über.com"

do shell script "defaults read com.hubionmac.test bla"

und jetzt dein Code?


Du hast nichts von einem @ gesagt und außerdem war das doch nur ein Beispiel und keine fertige Lösung.

Zudem sehe ich in Deinem Code keinen perl Aufruf. Wie soll ich da sehen, was Du falsch gemacht hast?
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
hubionmac
•--->
•--->


Anmeldedatum: 26.02.2004
Beiträge: 245
Wohnort: Münster

BeitragVerfasst am: 07.09.2012 - 12:23    Titel: Antworten mit Zitat

Na ja.. du könntest auch einfach die richtige Lösung präsentieren als nach einer falschen zu verlangen... Question egal, hier die Fehl-Funktion:

Zitat:
Code:
on decode_octal(str)
   return do shell script "perl -e 'binmode STDOUT => \":utf8\"; print \"" & str & "\"'"
end decode_octal

_________________
hubionmac.com akzeptiere Paypal und Pizza
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 07.09.2012 - 13:05    Titel: Antworten mit Zitat

hubionmac hat Folgendes geschrieben:
Na ja.. du könntest auch einfach die richtige Lösung präsentieren als nach einer falschen zu verlangen... Question


Es gibt nicht "die richtige Lösung" wenn ich nicht weiß, was Du da eigentlich machst.

Zum Beispiel kann ich nicht nachvollziehen, wo Dein Problem ist.

Hier mal mein Testscript:

Code:
set my_text to "Über@über.com"
do shell script "defaults write com.hubionmac.test bla " & (quoted form of my_text)

set str to first paragraph of (do shell script "defaults read com.hubionmac.test bla")

decode_octal(str)

on decode_octal(str)
   return do shell script "perl -e 'binmode STDOUT => \":utf8\"; print \"" & str & "\"'"
end decode_octal


Die Ausgabe ist bei mir korrekt: "Über@über.com"

Wo ist also das Problem?
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1067

BeitragVerfasst am: 07.09.2012 - 13:22    Titel: Antworten mit Zitat

Hubi!

Du NASE!

Wenn Du schon ein Problem hast, dann solltest Du mir auch die richtigen Beispieldaten und korrekte Scripte geben!

Wäre Dein Beispieltext "Über@nüber.com" gewesen, hätte ich das Problem auch sehen können.

Wie auch immer: Hier die Lösung:

Code:
set my_text to "Über@nüber.com"
do shell script "defaults write com.hubionmac.test bla " & (quoted form of my_text)

set str to first paragraph of (do shell script "defaults read com.hubionmac.test bla")

decode_octal(str)

on decode_octal(str)
   return do shell script "perl -we " & (quoted form of ("
      binmode STDOUT => ':utf8';
      $_= shift;
      s/([\\@\\$%:])/\\\\$1/g;
      eval qq(print qq:$_:);
   ")) & " " & (quoted form of str)
end decode_octal

_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jürgen
•->
•->


Anmeldedatum: 09.07.2012
Beiträge: 15
Wohnort: Langenfeld

BeitragVerfasst am: 10.09.2012 - 09:12    Titel: Just a little Security Antworten mit Zitat

Noch ein kleiner Security-Kommentar, auch wenn bei einem defaults read die Gefahren nicht so hoch sind und ihr mich evtl. für paranoid haltet:

Rechnet nie einen String, der von außen kommt, direkt in einen Code ein. Am besten gewöhnt ihr euren Fingern an, dass sie sich weigern, so einen Code zu tippen. Für Argumente von außerhalb der Script-Kontrolle gibt es den argv, egal ob in Python, Ruby, PHP oder Perl. Alles andere schafft euch ein riesen Tor für absichtliche oder unabsichtliche Injektionen. (Das Problem mit dem @-Zeichen im evaluierten String war schlicht eine Variante davon.)

Gruß, Jürgen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jürgen
•->
•->


Anmeldedatum: 09.07.2012
Beiträge: 15
Wohnort: Langenfeld

BeitragVerfasst am: 10.09.2012 - 09:37    Titel: Wenn Kürze das Wettkampfziel ist… Antworten mit Zitat

statt Lesbarkeit, dann geht das natürlich auch in jeder Sprache Wink

Code:
on decode_octal(str)
   set str to quoted form of str
   set cmd to quoted form of "import sys
print sys.argv[1].decode('unicode_escape' ).encode('utf-8')"
   set cmd_full to "python -c " & cmd & " " & str
   set r to do shell script cmd_full
   return r
end decode_octal

set X to "\\334ber"
decode_octal(X)


macht dasselbe wie meine Ursprüngliche Fassung. Hat nur weniger Zeilen.

Gruß, Jürgen[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter