Unicode im String als richtige ausgabe

Igel-own

Grünschnabel
Hallo erstmal an alle, bin neu hier und habe auch dementsprechend erfahrung^^

So zu meinen Problem, ich habe in einem String ein Unicode stehen z.B. "\u0061" habe es allerdings
aus mehreren chars zusammengesetzt. also in einer schleife aus einer datei ausgelesen.

z.B. char=92;
String = ""+char;
char='u';
String = String+char;........

Solange das ich da z.B drin stehen habe "\u0061" welches ja eigtl. als Ausgabe ein kleines a ergeben soll,
t aber leider nicht.

Ich würde mich echt über Hilfe freuen.


Hier einmal mein code.

Code:
import java.io.*;

public class ChangeToUni {
	public ChangeToUni(String readfile_name, String readfile_ext)
			throws IOException {
		File readfile = new File(readfile_name + readfile_ext);
		FileReader reader = new FileReader(readfile);
		String utf8 = "NULL";
		char back = 92;
		String utf8vor=back+"u";
		boolean utf8_control = false;
		int zaehler = 0;
		for (;;) {
			int readInt = reader.read();
			if (readInt == -1) {
				break;
			}
			char readChar = (char) readInt;
			String readString = "";// = "" + readChar;
			if(utf8!="NULL"){				
					utf8=utf8+"u";
					if(readChar=='u'){
						for(int i=1;i<=4;i++){
							int readerI = reader.read();
							if(readerI==-1){
								break;
							}
							char readerChar = (char)readerI;
							utf8=utf8+readerChar;
						}
					readString = utf8;

					utf8="NULL";
				}
			}
			else if(readChar==92){
				utf8=""+readChar;		
			}
			else if (readChar == 'ü')
				readString = "ue";
			else if (readChar == 'ä')
				readString = "ae";
			else if (readChar == 'ö')
				readString = "oe";
			else if (readChar == 'Ü')
				readString = "Ue";
			else if (readChar == 'Ä')
				readString = "Ae";
			else if (readChar == 'Ö')
				readString = "Oe";
			String content = readString;
			String ansi;
			try {
				ansi = new String(content.getBytes("UTF-8"), "ISO-8859-1");
				System.out.print(ansi);
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}

		}

	}
}



Mit Freundlichen Grüßen

Igel-own
 
Zuletzt bearbeitet:
Hallo und Herzlich Willkommen bei tutorials.de :)

Zuerst einmal zu deinem hier geposteten Code-Ausschnit. Ich würde Strings niemals mit einem "+" Stück für Stück zusammenbauen, da dies sehr unperformant ist und bei entsprechend langen Strings nur unnötig lange dauert. Der Grund hierfür ist, dass Java für jedes "+" eine neue Instanz von String baut, da Strings nicht veränderbar sind.

Daher würde ich eher zu einem StringBuilder oder StringBuffer oder etwas anderem raten, da diese die Methode "append()" bieten, welche performanter und effizienter seinen Zweck erfüllt.

Für das Auslesen einer Datei habe ich mir vor etwas längerer Zeit 2 Methoden geschrieben, weil ich das auch immer wieder brauche. Wenn du willst, kannst du folgendes gerne verwenden:

Java:
  /**
   * Liest eine Datei binär aus und gibt den Inhalt in 
   * Rohform als ein byte-Array zurück.
   * 
   * @param datei Datei
   * 
   * @return Dateiinhalt
   * 
   * @throws FileNotFoundException Falls die Datei nicht gefunden wurde.
   * @throws IOException Wenn beim Lesen der Datei etwas schief gegangen ist.
   */
  public static byte[] readFile(File datei) throws FileNotFoundException, IOException {
    if (!datei.exists()) {
      throw new FileNotFoundException();
    }

    BufferedInputStream in = new BufferedInputStream(new FileInputStream(datei));
    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    BufferedOutputStream out = new BufferedOutputStream(bs);

    byte[] ioBuf = new byte[8192];
    int bytesRead;

    while ((bytesRead = in.read(ioBuf)) != -1) {
      out.write(ioBuf, 0, bytesRead);
    }

    try { in.close() }
    catch (IOException e) {}
    try { out.close() }
    catch (IOException e) {}
    try { bs.close() }
    catch (IOException e) {}

    return bs.toByteArray();
  }

  /**
   * Liest eine Textdatei aus und gibt den Inhalt zurück.
   * 
   * @param datei Datei
   * 
   * @return Inhalt der Datei
   * 
   * @throws FileNotFoundException Falls die Datei nicht gefunden wurde.
   * @throws IOException Wenn beim Lesen der Datei etwas schief gegangen ist.
   */
  public static String readTextFile(File datei) throws FileNotFoundException, IOException {
    return new String(readFile(datei));
  }

So, nun zu deiner eigentlichen Frage:
Meines Wissens nach kennt Java bei Strings solche Escape-Sequenzen nicht (also beim Auslesen aus einer Datei). Daher würde ich nach dem Auslesen der Daten mir mit einem RegEx alle Unicode-Escape-Sequenzen holen und durch die entsprechenden Zeichen ersetzen. Hierzu sollte sich die String.replaceAll() eignen.

Gruß
BK
 
Zurück