Kyrillische Schriftzeichen als Argument an Anwendung übergeben

Hallo Leute,

ich will eine Datei als Argument übergeben um diese analysieren\wiedergeben zu können. Wenn diese Datei jedoch Kyrillische Zeichen(z.B. russische Buchstaben) enthält, dann werden diese nicht UTF-8 konform an die Anwendung weitergeben und enthält nur noch ??? statt kyrillischen Buchstaben. Innerhalb von Eclipse habe ich alles auf UFT-8 umgestellt, dass ändert jedoch nichts an den übergeben Argumenten. Wenn ich intern über einen Datei-Öffnen-Dialog diesen Dateipfad mit
file.getAbolutePath()
abfrage und ausgebe, komme ich auf die richtige Ausgabe.
Ich habe dies auch schon versucht
(args[0] ="C:\Users\user\Documents\mukke\2 - Колбасный Цех 3 (Шишки).mp3)

Charset set = Charset.forName("UTF-8"); 
System.out.println( new String(args[0].getBytes(), set));

Die Datei wird in diesem Fall nicht gefunden. Innerhalb der Windwos-Command-Prompt habe ich mit chcp 65001 das Charset zu UTF-8 gewechselt, hat aber auch nichts gebracht.
Kennt ihr eine Lösung für dieses Problem?

schonmal damit versucht: java -Dfile.encoding=UTF8 deineKlasse

das Argument zu übergeben dürfte kein Problem sein, oder funktioniert nur deren Ausgabe nicht, andere Ausgaben schon?
ich denke es liegt allein an der Ausgabe an eine Windows-Konsole, die kaum zu beinflussen ist, jedenfalls eine andere Frage,
dazu könntest du erstmal neu nachdenken/ suchen, falls ich richtig liege
(edit: nach nochmaligen Lesen deines ersten Postings kommen mir aber arge Zweifel, klingt schon bedenklich,
klar wird es mit Ergebnissen von Testprogramm unten)

hier ein kleines Testprogramm welches die Argumente ausgibt, die Dateinamen im Verzeichnis liest, auch mit Argument vergleicht,
ein kyrillisches Zeichen direkt aus Quellcode ausgibt sowie noch das Argument in einem Swing-Dialog

die Konsolenausgabe ist in allen Varianten schlecht (Eclipse-Konsole kann es),
der equals-Vergleich gelingt,
der Dialog zeigt es korrekt an, zu bestätigen?
edit: auch wird ein File aus dem Argument gefunden, alles paletti intern

public class Test2
{
    public static void main(String[] args)
    {
          System.out.println(Arrays.toString(args));
        File ff = new File(args[0]);
        System.out.println(ff.exists());
        File dir = new File(".");
        for (File f : dir.listFiles())
        {
            System.out.println(f.getName() + " - " + f.getName().equals(args[0]));
        }
        System.out.println("ï");
        JOptionPane.showConfirmDialog(null, "ok? " + args[0]);
    }
}

kannst ja nochmal deinen Dateinamen zum Test hier posten,
ich hatte mir nur mit Mühe ein Zeichen (ï) aus dem Internet kopiert

@EagleEye Womit DIE Frage auch geklärt wäre: http://forum.byte-welt.net/threads/9967-Eingeschränkter-Zeichensatz-für-Beitragstext?p=62674&viewfull=1#post62674 :smiley: (Hier zeigt er mir jetzt wieder nur Fragezeichen an, aber das liegt wohl am Browser (!?)… gestern zuhause hat’s funktioniert)

Irgendwie ist mir noch nicht klar, wo die Argumente herkommen … Tippst du die direkt ein?

cmd.exe unterstuetzt kein UTF-8, damit faellt das flach.
powershell soll UTF-8 unterstuetzen, ansonsten siehts dunkel aus fuer Windows.

[QUOTE=Marco13]@EagleEye Womit DIE Frage auch geklärt wäre: http://forum.byte-welt.net/threads/9967-Eingeschränkter-Zeichensatz-für-Beitragstext?p=62674&viewfull=1#post62674 :smiley: (Hier zeigt er mir jetzt wieder nur Fragezeichen an, aber das liegt wohl am Browser (!?)… gestern zuhause hat’s funktioniert)
[/quote]
ach ja, das Problem auch noch, könnte hier im Thread stören, bisher aktuell noch kein Fragezeichen entdeckt, die im ersten Posting hier waren sicherlich so gedacht :wink:

edit: Mist, da steht ja doch was richtiges im ersten Posting im Editor-Modus…
C:.…\2 - Колбасный Цех 3 (Шишки).mp3

Irgendwie ist mir noch nicht klar, wo die Argumente herkommen … Tippst du die direkt ein?

ich habs mit Tab-Autocomplete gemacht

*** Edit ***

mein ï war wohl wirklich zu harmlos, Konsole kann es anzeigen, wenn schon nicht in Ausgabe, dann zumindest Eingabe,
macht hier im Forum (bisher) keine Probleme, die ఠ_ఠ bisher aktuell auch noch nicht,

der Dateiname aus dem ersten Posting schon heftiger, Konsole zeigt da bei Autokomplete selber schon ? an,
interessant: wegen Leerzeichen und Klammern setzt die Konsole Anführungszeichen drumherum,
dann geht in meinem Programm auch nicht mehr viel, equals, exists(), Dialog-Ausgabe mies,
wahrscheinlich kommen dann Fragezeichen an, kann jeder selber genauer untersuchen (selber noch geschaut: ja…)

Leerzeichen müssten aus den Dateinamen wohl raus, nur bei Klammern will Konsole zwar Anführungszeichen, manuell diese entfernt geht es dann aber,
Ausgabe vom Programm zwar Fragezeichen, dafür equals, exists(), Dialog ok

kommt freilich kaum in Frage, mal eben alle Leerzeichen überall zu entfernen und immer auf Löschen der Anführungszeichen zu achten…,
was ist denn der Anwendungsfall dazu, was ist das Ziel? manueller Bedienungskomfort?

[QUOTE=SlaterB]kommt freilich kaum in Frage, mal eben alle Leerzeichen überall zu entfernen und immer auf Löschen der Anführungszeichen zu achten…,
was ist denn der Anwendungsfall dazu, was ist das Ziel? manueller Bedienungskomfort?[/QUOTE]

wenn sich alle hersteller von hardware und alle entwickler von software mal auf EINEN EINZIGEN weltweit gültigen und IMMER genutzten zeichensatz einigen würden und dann auch nur zeichen aus diesem nutzen würden gäbe es das probleme nicht

aber alleine der fakt das ein leerzeichen in der regel als parameter-trenner genutzt wird müsste eigentliche folgende regel nach sich ziehen : in dateinamen sind keine leerzeichen zulässig !
und ? gibt diese ? NEIN ! es ist völlig egal ob man im pfad oder datei-namen leerzeichen hat, man kanns ja escapen oder in quotes packen

ähnliches probleme dürfte es mit “sonderzeichen” geben

ein ganz normales “deutsches” windows läuft halt mit Win-1251-1 und CMD noch aus zeiten des DOS mit CP850 , und trotzdem wird dem nutzer eine unicode-platform vorgespielt was intern in einer riesigen charset-katastrophe ende
und dazu kommt dann noch das java selbst laut doc ein “modified UTF8” nutzt , also auch noch auf eine lib angewiesen ist die im hintergrund zwischen dem OS-charset, dem was der user nutzt (heute ja meist unicode) und dem eigenen krams hin- und her-umwandelt

das es dabei zu problemen kommt liegt auf der hand

aber sollte man deshalb wieder zurück in die steinzeit und sagen : so, alles was mit IT zu tun wird jetzt englisch und folgt regeln wie z.b. erlaubte zeichen A-Za-z0-9-_. und nichts mit leerzeichen
ist doch genau so bekloppt

fakt ist : das problem liegt an den unterschiedlichen charsets die zwar bei der darstellung das selbe erzeugen aber intern halt ne andere byte-sequenz dran binden

Naja ich wollte einfach nur, dass mein Programm auch konsolenbasiert funktioniert und wollte einfach nur eine Audio-Datei übergeben. Der Fehler ist aber auch interessant vor allem wenn man einfach nur eine Datei einlesen will, dann bearbeiten und unter dem selben namen abspeichern möchte. Das funktioniert dann nämlich nicht, da der abgespeicherte Name nur ??? enthält.

Irgendwie ist mir noch nicht klar, wo die Argumente herkommen … Tippst du die direkt ein?

Argumente werden an die jar übergeben: java -jar programm.jar kyrillische_zeichen.

*** Edit ***

cmd.exe unterstuetzt kein UTF-8, damit faellt das flach.

Meines Wissens unterstützt cmd.exe UTF-8 bzw. den kyrillischen Schriftsatz: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/chcp.mspx?mfr=true.
chcp 65001
Hinweis: Deine Font sollte natürlich auch russische Zeichen beinhalten. Ich musste meine Font auch noch zu Lucida umstellen, erst danach wurden die zeichen richtig angezeigt.

*** Edit ***

Ja intern ist alles auch bei mir i.O. Aber was ist wenn ich die Datei unter dem selben Namen wieder abspeichern möchte?

[QUOTE=progsfa]Meines Wissens unterstützt cmd.exe UTF-8 bzw. den kyrillischen Schriftsatz: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/chcp.mspx?mfr=true.
chcp 65001
[/QUOTE]
Hi,

cmd.exe unterstuetzt definitiv kein UTF-8, keine Chance.

„bzw. den kyrillischen Schriftsatz“
Das ist wiederum etwas ganz anderes als UTF-8 und wird ueber Codepages geregelt :wink:

Wie gesagt, das wird nix.

die Frage war ja wie einzutippen, kann deine Tastatur das? Konsole wird dabei sicher gleich ? anzeigen?
bei mir wie gesagt Autocomplete, ein Dateianfang mit akzeptabler „2“ dafür hilfreich :wink:

Ja intern ist alles auch bei mir i.O. Aber was ist wenn ich die Datei unter dem selben Namen wieder abspeichern möchte?

ich habe das speziell nicht ausprobiert, aber wieso sollte speziell dabei ein Problem sein?

wenn man die Argument-Übergabe schafft,
(keine Lösung, aber Wiederholung des Hinweises: ) meiner Ansicht nach wie gesagt abhängig davon ob mit oder ohne Anführungszeichen wegen Leerzeichen/ Klammern,
dann hat Java intern den richtigen Namen, wie auch dir.listFiles() liefert, gewiss JFileChooser,
richtige Anzeige in Dialog usw.,

Ausgabe auf Konsole mag nicht gehen, aber warum sollte Java die Datei nicht finden, FileOutputStream usw. scheitern?
ob es so ist, das müsste ich wie gesagt testen, du weißt es vielleicht schon besser, aber klingt zunächst noch nicht überzeugend formuliert

ganz kurzes Testprogramm

public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        File f = new File("2 - Колбасный Цех 3 (Шишки).mp3");
        f.createNewFile();
    }

}

erstellt eine Datei mit richtigen Namen
(falls im Browser nur ? zu sehen, dann evtl. im Zitier-Modus besser, soll der richtige Name im Quelltext sein)