Sonderzeichen auf Titelleiste

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Moin,

kann mir einer bitte einen Ratschlag geben? Ich habe folgendes Problem:

Mir gehen die Sonderzeichen auf der Titelleiste verloren (Sonderzeichen aus UTF-8 charset - nicht die Ä, Ö, Ü's).

Beim debuggen auf Eclipse ist noch alles Richtig. An der Stelle
Code:
...
setTitle(title);
...
sehe ich den Wert für title noch richtig (Eclipse ist auf UTF-8 gestellt). Wie kann ich die Titelleiste angeben, dass er UTF-8 Kodierung anzeigt?

Danke für eure Hilfe
 
Versuch mal Unicode-Zeichen zu verwenden (siehe Zeichentabelle).
z.B.:

ü = \u00FC
ʮ = \u02AE
ᴂ = \u1D02
 
Das Hatte ich auch schon versucht. Aber vielleicht mache ich es falsch. Hast du einen Tip hierfür?
Code:
StringBuffer sb = new StringBuffer();

StringBuffer ersetzt= new StringBuffer();
...
for(int i = 0; i < sb.length(); i++) {
   int c = (int) sb.charAt(i);
   if (c > 255) {
      // Hier hänge ich??? Wie kann ich den alle Zeichen die größer 255 sind (also nicht in ISO sind) als Unicode darstellen?
      ersetzt.append("\uXXXX");			    			
   } else {
      ersetzt.append(sb.charAt(i));
   }
}
...
setTitle(ersetzt);

Die Titelleiste setzt sich aus unterschiedlichen Komponenten zusammen die sich in einem StringBuffer wieder finden (sb). Die Sonderzeichen daraus durch Unicode ersetzen (durch \uXXXXX).
 
warum schreibst du deinen Text nicht direkt?

Code:
sb.append("M\u00FCller");

oder so:
Code:
String titeltext = ersetzt.toString();
titeltext.replaceAll('ü','\u00FC');
setTitle(titeltext);
 
Ariol hat gesagt.:
warum schreibst du deinen Text nicht direkt?

Code:
sb.append("M\u00FCller");
Ich weiß nicht welche Sonderzeichen auftreten können. Deshalb iteriere ich durch den StringBuffer und ersetze ich (oder versuche ich) die Sonderzeichen durch Unicode Notationen zu ersetzen (\uXX).
Ariol hat gesagt.:
oder so:
Code:
String titeltext = ersetzt.toString();
titeltext.replaceAll('ü','\u00FC');
setTitle(titeltext);
Finde ich auch Ok, wenn man es irgendwie generisch machen kann?!? Ich möchte gerne eine Mappingtabelle vermeiden.
 
Du könnest mal folgendes versuchen:

Code:
byte[] text = sb.toString().getBytes( "UTF-8" ); 
String titeltext = new String( text, "UTF-8" );

Vielleicht funktioniert das.

Und du solltest statt StringBuffer lieber StringBuilder verwenden.
 
Ariol hat gesagt.:
Du könnest mal folgendes versuchen:

Code:
byte[] text = sb.toString().getBytes( "UTF-8" ); 
String titeltext = new String( text, "UTF-8" );

Vielleicht funktioniert das.
geht leider nicht :-(
Ariol hat gesagt.:
Und du solltest statt StringBuffer lieber StringBuilder verwenden.
Verwenden hier immernoch Java 1.4 :-(

Die Sonderzeichen bekomme ich nur durch die Notation rein \uXX. Aber dummerweise funzt das hier nicht
Code:
...
int c = (int) sb.charAt(i);
...
char cc = "\u" + c;
🙂
 
Ich glaub nicht dass es was ändert, aber:
Code:
String s = "üöäüöäüöäüöää";
Charset cs = Charset.forName( "UTF-16" );
		System.out.println(cs.encode(s).asCharBuffer().toString());

Vielleicht hilft auch dass:
Code:
char c = 'ö';
		String s = Integer.toHexString(c);
		for(int i = 4; i >= s.length(); i--)
		{
			s = 0 + s;
		}
Damit bekommst du den Code als String, wie du da jetzt allerdings einen einzelnen char draus machst.
Also für ö bekommst du so "00F6".

Und das hier könnte auch noch interessant sein.
http://www.galileocomputing.de/open...04_008.htm#mj50612da94ec80c04af22397c896c7c9c
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben