Base64 - Wie beziehe ich die Umlaute in die Speicherplatzrechnung mit ein?

Stoegizzle

Mitglied
Hallo Gemeinschaft ;)
Ich habe folgendes Problem: Ich muss für eine universitäre Arbeit ein Base64 Programm schreiben dass einen Text kodiert bzw dekodiert. Nun stoße ich bereits am Anfang auf ein Problem: bei der Speicherplatzberechnung weiss ich nicht genau wie ich den string darauf untersuchen kann wie viele Umlaute bzw"ß" er enthält -.-
Bitte um Hilfe stehe mega am Schlauch.
 

truesoul

Top Contributor
Hallo.

Wenn du Umlaute insgesamt zählen willst, dann erstelle eine Methode, die dir die Summe zurück gibt.
In der Methode gehst du via Schleife über jeden char eines char Array's (toCharArray()) rüber und prüfst ob es ein Umlaut ist, wenn ja setzt du den Zähler einen hoch.

toCharArray() ist die Methode die dafür gebrauchen könntest.

Grüße
 

Stoegizzle

Mitglied
@truesoul das funktioniert aber bei mir nicht so richtig
gibt bei mir fehler aus, da inkompartibilität zwischen char und java.lang.string


Java:
public static int getBase64ByteSize(String str) {
    /* Speicherplatz für den eingegebenen Text berechnen
     *und gegebenenfalls noch Nullen anhängen, um die Kodierung
     *bzw Dekodierung möglich zu machen */
  
  
    //Wir beachten die Ausnahmen bei Umlauten un "ß"
    //String str;
    char[] array= str.toCharArray();
  
     for(int i = 0; i <= array.length; i++) {
      if(array[i] == "\u00C4") {
        z++;
      } else if(array[i] == "\u00E4") {
        z++;
      } else if(array[i] == "\u00D6") {
        z++;
      } else if(array[i] == "\u00F6") {
        z++;
      } else if(array[i] == "\u00DC") {
        z++;
      } else if(array[i] == "\u00FC") {
        z++;
      } else if(array[i] == "\u00DF") {
        z++; 
      }
    }
 
Zuletzt bearbeitet von einem Moderator:

Stoegizzle

Mitglied
das habe ich hinter alllen array stehen hats nur nicht hier ins forum mit reinkopiert ;)
aber selbst so funktioniert das nicht ,da ich anscheinend nicht auf den string den die methode bekommt ein char array bilden kann oder weis gott warum -.-
 

Stoegizzle

Mitglied
@mrBrown wie meinst du das geanu könntest du da ein beispiel bringen?
Wir dürfen nicht die java eigenen methoden benutzen und müssen das alles selbst schreiben und eine Metode davon ist eben diese hier zur berechnung der anzahl der bytes und da umlaute 2 bytes benötigen bringen die ansonsten die formel durcheinander
 

mrBrown

Super-Moderator
Mitarbeiter
@mrBrown wie meinst du das geanu könntest du da ein beispiel bringen?
Statt [I]"\u00DF"[/I] einfach 'ß'

Wir dürfen nicht die java eigenen methoden benutzen und müssen das alles selbst schreiben und eine Metode davon ist eben diese hier zur berechnung der anzahl der bytes und da umlaute 2 bytes benötigen bringen die ansonsten die formel durcheinander
Jeder char in Java ist 2 Byte groß, die sind UTF-16...
 

Stoegizzle

Mitglied
wir müssen allerdings UTF-8 verwenden und in unserem code dürfen alle umlaute etc nur als unicode stehen wir dürfen also nicht einfach Ä Ö ß schreiben was die ganze sache echt ungemütlich macht
 

Stoegizzle

Mitglied
das steht nirgendwo explizit geschrieben. auf dem aufgabenblatt steht nur dass dies dazu dient um auch auf anderen geräten den code vollständig korrekt lesen und compilieren zu koennen
 

mrBrown

Super-Moderator
Mitarbeiter
wir müssen allerdings UTF-8 verwenden und in unserem code dürfen alle umlaute etc nur als unicode stehen wir dürfen also nicht einfach Ä Ö ß schreiben was die ganze sache echt ungemütlich macht
Dann rechne den String doch erst in UTF-8 um (vermutlich zu einem byte-Array, oder wie sieht die Vorgabe aus?), und zähl dann dessen Länge.
Sonderzeichen zählen ist zumindest ein ziemlich unsinniger Weg (sind ja nur ein paar tausend...)

Wenn das doch so gemacht werden soll, ist dein Code von oben richtig - du musst nur die Strings zu chars ändern (dafür reichts, die Anführungszeichen anzupassen)


(Und 'ß' ist Unicode...unabhängig davon, ob man 'ß' oder '\u00DF' schreibt. Wer stellt denn solche Aufgaben :rolleyes:)
 
Zuletzt bearbeitet:

truesoul

Top Contributor
Hi

Java:
private final Charset UTF8_CHARSET = Charset.forName("UTF-8");

String decodeUTF8(byte[] bytes) {
    return new String(bytes, UTF8_CHARSET);
}

byte[] encodeUTF8(String string) {
    return string.getBytes(UTF8_CHARSET);
}

Grüße
 

truesoul

Top Contributor
Also Java verwendet Standardmäßig UTF-16 für String oder StringBuilder und du wolltest ein UTF-16 "encoden" in UTF-8.

Also da musst du den String schon vorher in das richtige Format bringen.

Grüße
 

mrBrown

Super-Moderator
Mitarbeiter
koennte ich auch den code von @Soul irgendwo einfuegen und wenn ja wo?
Das wird nichts ändern, dein fehlerwerfender Code läuft auf das gleiche hinaus, dürfte also den gleichen Fehler werfen.

wir müssen mit drjava arbeiten ganaueras als jre 1.8 kann ich etz auch ned sagen
Dann wende dich an den Prof/Tutor/Whatever. Wenn UTF-8 ein unbekanntes Charset ist, ist irgendwas mit der JVM nicht in Ordnung, vielleicht ist das auch gewollt von drjava. (aber ernsthaft, drjava an 'ner Uni?)
 
X

Xyz1

Gast
Lass dich von dem Quatsch von den beiden nicht ablenken....
Java:
class Speicherplatz {
    public static void main(String[] args) throws IOException {
        String s = "Hällü"; // Die Ümlaute bräuchen in UTF 8 2 Bytes.
        final int length1 = length(s);
        write(s);
        final int length2 = (int) new File("54321.txt").length();
        System.out.println(length1);
        System.out.println(length2);
        System.out.println(length1 == length2);
    }
    private static byte[] encode(String s) throws UnsupportedEncodingException {
        return s.getBytes("UTF-8");
    }
    private static int length(String s) throws UnsupportedEncodingException {
        return encode(s).length;
    }
    private static void write(String s) throws IOException {
        try (FileWriter fw = new FileWriter("54321.txt")) {
            fw.write(s);
        }
    }
}

Ich zitiere mal:
Convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.
 
X

Xyz1

Gast
Dir ist schon aufgefallen
.... Ich habe Seite 3 bis 3 gelesen, das langt schon.

Wenn seine Java Installation falsch ist, können wir relativ wenig da machen.

Aber dennoch: java -version und
Java:
System.out.println(Charset.availableCharsets());
System.out.println(Charset.forName("UTF-8"));
System.out.println(Charset.isSupported("UTF-8"));

Da muss dann sowas stehen wie UTF-8=UTF-8.

Wenn nicht, mussers halt proprietär machen, so wie ich es beschrieben habe.
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn nicht, mussers halt proprietär machen, so wie ich es beschrieben habe.
Merkst du eigentlich selbst, was für einen Unsinn du redest?

Das was du beschrieben hast ist weder proprietär, noch ändert es irgendwas an dem Problem.
Falls du es nicht bemerkt hast, du nutzt selbst explizit UTF-8 - der Fehler fliegt also trotzdem.
Und was du da mit FileWriter willst erschließt sich wohl nur dir, mit UTF-8 wird da zumindest nicht gemacht - schlimmer noch, was da passiert ist quasi zufällig.
 

X5-599

Top Contributor
@All

Sind wir sicher dass nicht einfach ein Errorhandling fehlte? á la: try/catch bzw throws.

@Stoegizzle
Kommt dein Error beim Kompillieren oder bei der Ausführung?

Code:
byte[] bytes = str.getBytes( "UTF-8" );
 

truesoul

Top Contributor
X

Xyz1

Gast
@truesoul :
Ist doch so. :D Es wurde nach Hilfe gefragt, dann kamen ein paar Beiträge die man nicht "Beiträge" nennen kann - und meiner zur Fehlerursache wird nicht beachtet. :D

Dann macht's alleine.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
L Methoden BASE64.getEn/Decoder nicht vorhanden Java Basics - Anfänger-Themen 6
C Compiler-Fehler Problem mit Base64 Java Basics - Anfänger-Themen 1
B String verschlüsseln - Applet - ohne BASE64 Java Basics - Anfänger-Themen 7
G byte[] (Base64) korrekt übergeben Java Basics - Anfänger-Themen 4
P base64 Kodierung Java Basics - Anfänger-Themen 2
E Java und Base64-Decoding Java Basics - Anfänger-Themen 2
A DSA und Base64 Verschlüsseln und Entschlüsseln Java Basics - Anfänger-Themen 4
M Audio Files mit Base64 De-/Endcodieren Java Basics - Anfänger-Themen 5
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
L Collator Umlaute Java Basics - Anfänger-Themen 5
O URL, UTF8, Umlaute Java Basics - Anfänger-Themen 15
F Umlaute beim versenden von SMS Java Basics - Anfänger-Themen 10
krgewb Input/Output Umlaute in generierter HTML-Datei Java Basics - Anfänger-Themen 7
C Java stellt unter Windows keine Umlaute dar Java Basics - Anfänger-Themen 9
W JTextField-Objekt liest Umlaute mit falschen Zeichen ein Java Basics - Anfänger-Themen 5
A Text mit "Scanner" eingeben und Umlaute ersetzen Java Basics - Anfänger-Themen 7
W HTML Code, Umlaute werden nicht richtig dargestellt Java Basics - Anfänger-Themen 7
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
S Codierung der Umlaute in Mails Java Basics - Anfänger-Themen 2
M Fileoutputstream: Linux Dateinamen mit Umlaute Java Basics - Anfänger-Themen 4
OnDemand Umlaute ausgeben Java Basics - Anfänger-Themen 7
V Umlaute in mysql, antscript, powershell utf-8 Java Basics - Anfänger-Themen 7
V Umlaute beim Parsen einer HTML Seite Java Basics - Anfänger-Themen 4
tuttle64 Keine Umlaute im Dos Fenster Java Basics - Anfänger-Themen 12
S Umlaute aus Dateisystem entfernen Java Basics - Anfänger-Themen 5
B InetAddress und umlaute Java Basics - Anfänger-Themen 2
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
D javadoc: wie werden Umlaute richtig dargestellt? Java Basics - Anfänger-Themen 3
B Input/Output Kodierte Umlaute aus Datei umwandeln? Java Basics - Anfänger-Themen 2
R Umlaute Mac -> Windows Java Basics - Anfänger-Themen 2
0 Umlaute Java Basics - Anfänger-Themen 4
R UTF-8 Webseite Umlaute lesen. Java Basics - Anfänger-Themen 2
F SQL Server aus Umlaute werden Fragezeichen Java Basics - Anfänger-Themen 4
P Umlaute in Datei ändern Java Basics - Anfänger-Themen 4
R Umlaute mit Switch-Case tauschen Java Basics - Anfänger-Themen 26
F Umlaute eines Strings entfernen (Verwendung von this?) Java Basics - Anfänger-Themen 2
S Eingabeaufforderung stellt Umlaute nicht dar Java Basics - Anfänger-Themen 10
A Umlaute darstellen Java Basics - Anfänger-Themen 4
M Umlaute in Java Applets? Java Basics - Anfänger-Themen 3
O Umlaute bei der Erfassung Java Basics - Anfänger-Themen 12
P Umlaute und Byte Java Basics - Anfänger-Themen 2
J Umlaute Java Basics - Anfänger-Themen 3
R Umlaute in einer .properties-Datei Java Basics - Anfänger-Themen 1
S Umlaute und Sonderzeichen erkennen Java Basics - Anfänger-Themen 12
C umlaute mit DataOutputStream schreiben Java Basics - Anfänger-Themen 3
N Umlaute ersetzen Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben