# UTF-8 in STring umwandeln oder umgedreht



## Guest (20. Dez 2006)

Hallo,

ich habe hier so einen kleinen Chat zusammengebastelt, basiert auf Sockets und funktioniert soweit sogut, nur hab ich ein kleines Problem.

Ich möchte gerne eine Art Filter einbauen, dass wenn man zB eine Beleidigung schreibt etwas anderes auf dem Display erscheint. Nun ich habe das Problem soweit ausfindig gemacht, alles was über Sockets gesendet wird wird in UTF-8 gesendet, nun ich vergleiche es aber am andern Ende mit einem String, der also 16 Bits hat und der UTF-8 ist ja 8 bit encoded.

Ich habe also lange gegooglt und auch vielles probiert, nur weiss ich nicht genau was ich da machen kann. Es gibt auch eine möglichkeit einen Stzring im CLient einzulesen nur ist die nicht empfehlenswert.

Ich würde mich über eure VOrschläge freuen, wie kann ich da am besten vorgehen?

mfg
Kabel


----------



## Campino (20. Dez 2006)

Wenn du den Text am Ende auch in einem String oder StringBuffer speicherst, dürftest du eigentlich kein Problem haben.


----------



## Guest (20. Dez 2006)

Hallo,

danke für die Antowrt, nur weiss ich nicht genau wie du das meinst...

Also ich soll nachdem das ganze in UTF-8 Form ankommt es in einen String speichern oder Stringbufer? Wie geh ich da am besten vor?

Ist das nur ein Befehl oder soll ich da ne ganze Klasse implementieren?

Ich werd mal nachsuchen, aber über weitere Ratschläge würde ich mich freuen.

Thx für die Hilfe,

mfg
Kabel


----------



## SlaterB (20. Dez 2006)

um da weiterzukommen musst du mal bisschen mehr verraten,
wie liegen die Daten denn vor? als Stream, bytes oder String?


verwende die Klasse String:
String(byte[] bytes, String charsetName)
          Constructs a new String by decoding the specified array of bytes using the specified charset.


 byte[] 	getBytes(String charsetName)
          Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.


----------



## Kabel (20. Dez 2006)

Wie meinst das mit den daten? ALso ich hab eine Server Client Verbindung, die daten werden über eine Stream gesendet und dann per readUTF gelesen und mit writeUTF geschrieben...

nun ich will diese daten dann mit einem String vergleichen, if(readUTF=="LALA") so in der art, nur das klapt eben wegen dem falschen format nicht.

Also du meinst ich soll das ganze einfach anders Senden? Mh...

wird das den mit deinem Vorschlag so klappen wie ich es will?

Ich danke sehr,

mfg
Kabel


----------



## SlaterB (20. Dez 2006)

von Senden und Empfangen spreche ich nicht, darüber hast du ja bisher noch weniger gesagt (verwendete Streams usw.)
sicherlich könnte man mit richtigen Senden und Empfangen was erreichen

-------

Strings vergleicht man mit equals,

du hast also einen String 'readUTF' vorliegen, aber im falschen Charset?
dann verwende

```
String besser = new String(altString.getBytes("gewünschtesCharSet"));
```
oder sowas in der Art, genaues kann ich nicht sagen, das ist für mich immer was zum herumprobieren..


----------



## Kabel (22. Dez 2006)

Hallo,

thx für die Antwort, ich habe das nun soweit probiert, nur gehts immer noch nicht...

Was für ein CharSet ist den ein String? Ich hab mit Default probiert auch mit Ascii usw... mh weiss jemand das bitte?

mfg
Kabel


----------



## Roar (22. Dez 2006)

jo, sorry aber der code new String(altString.getBytes("gewünschtesCharSet")); ist ziemlich sinnlos :roll: string is string. wenn du beide texte als string hast, hast du wohl was falsch.
beachte, dass "readUTF=="LALA"" immer false ergibt, du außerdem vermutlich prüfen willst, ob das schimpfwort im gesendeten string vorkommt und nicht ob die beiden gleich sind.


----------



## Kabel (22. Dez 2006)

ja we jetzt? Ein String ist ein String und der andere ist UTF-8 encoded. Nun möchte ich gerne UTF-8 in String umwandeln.

Zuerst wäre ich mal froh wenn ich schon alleine überprüfen ob das eingetippte Wort ein Schimpfwort ist. Später werde ich dann überlegen wie ich einbauen kann dass er die Strings durchsucht...

mfg
Kabel


----------



## Roar (22. Dez 2006)

Kabel hat gesagt.:
			
		

> ja we jetzt? Ein String ist ein String und der andere ist UTF-8 encoded. Nun möchte ich gerne UTF-8 in String umwandeln.



nein, strings sind strings und haben (nach außen) kein encoding. wichtig ist nur wie du die bytes die du empfängst einliest, aber das macht dein DIS schon für dich


----------



## Kabel (22. Dez 2006)

Ja ok. Aber was soll ich den jetzt am besten tun?

Ich komme irgendwie alleine nicht drauf. Braucht ihr vielleicht mehr infos? Ich poste mal ein Teil des Sockets. Da wo ich das Problem vermute. Also ich sende einen UTF-8 "String" über ein Socket. Ich will es mit andern vergleichen. Hier der Code:


```
while (true) {
				
//				... read the next message ...
				String message = din.readUTF();
				
//				... tell the world ...
				String message1="lala";
				StringBuffer 				System.out.println(message);
			        message = new String(utf8, "UTF-8");
			    } catch (UnsupportedEncodingException e) {
			    }

	    if(message=="")
	    {
	    	System.out.println("Do NOT Send Empty things!");
	    }
	    
	    
	    		if (message==message1)
				{
					System.out.println("same");
				}
				else System.out.println("not same");
				System.out.println( "Sending "+message );
//				... and have the server send it to all clients
				server.sendToAll( message );
```
So wenn ihr weitere braucht nur fragen =)

ALso ich hoffe das macht mein Problem etwas klarer.

Auf Jedenfall danke ich euch für die Hilfe bisher 

mfg
Kabel


----------



## Murray (22. Dez 2006)

Wie hier schon geschrieben wurde: String vergleicht man mit equals, nicht mit ==, denn i.d.R. will man ja wissen, ob es sich um einen String handelt, der den gleichen Inhalt hat wie ein anderer, und nicht etwa, ob es sich um ein und dasselbe Objekt im Speicher handelt. 

Solange Du solche Statements

```
if (message==message1)
```
verwendest, sind Encodings etc. das geringste Problem.

Ändere Das mal in 

```
if (message1.equals( message))
```
; evtl. ist Dein Problem damit schon beseitigt.


----------



## Kabel (22. Dez 2006)

JJaaaa =) genau was ich brauchte!

Ich danke dir sehr, wie ich auch all denen danke die mir schon vorher geholfen haben ohne dass ich es fertig gebracht habe es zu verstehen^^


Danke sehr =)

mfg
Kabel


----------

