# Unicode-Sequenz (u1234) in Variable speichern und ausgeben



## Pida (5. Jan 2009)

Hallo zusammen,

man kann ja Sonderzeichen folgendermaßen ausgeben:

```
println "\u1234"; // Ausgabe: irgend ein Unicode-Zeichen
```

Aber wie mache ich so etwas:

```
String uc = "\u1234";
println(uc); // Ausgabe: \u1234, NICHT das Unicode-Zeichen
```

Ich möchte natürlich auch in der zweiten Variante ein einzelnes Zeichen, nicht den Unicode code point.

Danke
Pida


----------



## SlaterB (5. Jan 2009)

nun mal ganz langsam, einen String in einer Variablen zu speichern ändert doch nichts an der Ausgabe,
denken wir mal in vollständigen Programmen:

```
public class Test {

	public static void main(String[] args) throws Exception {
		String uc = "\u1234";
		System.out.println(uc + " - " + uc.length());
	}
}
```
bei mir ist die Ausgabe: ? - 1

und bei dir?


----------



## mahe (5. Jan 2009)

Du musst den Wert des Zeichens in einen Hex-String umwandeln (wenn Du das meinst was ich meine  ) oder eben den String vorher schon so aufbauen.

Beispiel:

```
String uc1 = "\u1234";
		
		System.out.println(uc1);
		System.out.println("\\u"+Integer.toHexString(uc1.charAt(0)));

		String uc2 = "\\u1234";
		
		System.out.println(uc2);
```


----------



## Pida (5. Jan 2009)

Danke sehr!

SlaterB, du hast natürlich Recht - ich konnte mir das Problem ja auch nicht erklären.
Inzwischen habe ich festgestellt, dass ein Codebeispiel wie das obige auch bei mir funktioniert - da habe ich nicht gründlich genug getestet.

Eigentlich brauche ich aber sowas:


```
String myString = "\\u" + "03d1";  // "\u" mit nur einem Backslash wird als 'invalid Unicode' erkannt
System.out.println (myString); // Ausgabe: \03d1
```
Hintergrund: 
Ich habe Unicode-Sequenzen mit einleitendem \u, entferne dann das \u und verändere den folgenden hexadezimalen Wert durch Addition oder Subtraktion. Soweit klappt das auch.
Dann aber muss das führende \u wieder dran, damit ich das entsprechende Zeichen ausgeben kann. Das habe ich oben - erfolglos - mit der Konkatenation getan.

Offensichtlich wird gespeichert, dass in Zeile 1 der Backslash als Literal und nicht als Steuerzeichen verwendet wird. Daher wird dann \u auch nicht als Einleitung einer Unicode-Sequenz erkannt.

Was kann man da machen?

Gruß
Pida


----------



## SlaterB (5. Jan 2009)

> String myString = "\\u" + "03d1";  // "\u" mit nur einem Backslash wird als 'invalid Unicode' erkannt
> System.out.println (myString); // Ausgabe: \03d1

schon wieder ungenau, die Ausgabe ist \u03d1 (+Stringlänge 6), so ein u kann ja nicht verschluckt werden ,

ohne Rechnen kommst du hier wohl nicht weiter, 03d1 als HexString parsen, wie gesagt


```
public class Test {

	public static void main(String[] args) throws Exception {
		String uc = "\\u" + "03d1";
		System.out.println(uc + " - " + uc.length());
		System.out.println('\u03d1');
		System.out.println((int) '\u03d1');
		System.out.println(Integer.parseInt("03d1", 16));
	}
}
```


----------



## Pida (6. Jan 2009)

Sorry, mit dem u hast du natürlich Recht.

Mir ist leider nicht klar, inwieweit deine Antwort mir helfen könnte.
\u03d1 ist der griechische Buchstabe Theta, und diesen muss ich ausgeben. Statt diesem Beispiel könnten allerdings auch gut 100 andere Codes dort stehen. 
Den Code 03d1 habe ich vorher berechnet, ich kann den Buchstaben also nicht etwa fest als \u03d1 im Quelltext kodieren, wie du es in Zeile 7 getan hast. Statt dessen mein Versuch der Konkatenation mit \u, wie er auch bei dir in Zeile 5 zu finden ist.

Aber wie komme ich von deinem Code, der ja mit der Berechnung eines Integers endet, zum Theta?

Hier übrigens meine Ausgabe:

```
\u03d1 - 6
ϑ
977
977
```

Danke
Pida


----------



## mahe (6. Jan 2009)

Wenn Du den Code im Dezimalsystem in einem Integer hast, brauchst Du diesen nur zu einem Char casten.


```
int test = (int)'\u002b'; // +

		System.out.println( (char)test );

		test -= 8; // #

		System.out.println( (char)test );
```

Sind wir jetzt langsam an Deinem Problem angelangt? :wink:

[edit]
Wenn Du den Code tatsächlich als String hast (in einem beliebigen Zahlensystem (fast)) geht das natürlich auch:

```
if (Integer.parseInt("002b", 16) == (int)'\u002b')
			System.out.println("Juhu!");
```


----------

