# Konvertierung Internetexplorer Java (CP1252 -> HTML Entit



## Reth (14. Mrz 2005)

Hallo allerseits,

ich habe ein Problem mit der Zeichendarstellung von Daten, die in JSP-Formularen via IE eingegeben werden.
Die Daten sind mit CP1252 kodiert. Allerdings hat MS ja die "schöne" Eigenart, ASCII Kodes >127<255 mit 
darstellbaren Zeichen zu belegen. D.h. ich bekomme ein "RIGHT SINGLE QUOTATION MARK" (´) mit der ASCII Kodierung 146. Und speichere es so in die DB2. Dort kommt das Zeichen aber als undefiniert an (müsste mir mal die Hexcodes ansehen, die DB2 da verwendet) und kann im weiteren Verlauf nicht richtig verarbeitet werden.

Wenn ich die Daten direkt aus dem Request in eine Textdatei ausgeben lasse, bekomme ich ein ? angezeigt (da Java das Zeichen wohl als nicht-darstellbar ansieht).

Wie kann ich nun dieses (und evtl. andere betroffene Zeichen) so Konvertieren, dass ich z.B. mit den StrinEscapeUtils von Jakarta Commons Lang richtige HTML Entities bekomme?

Habe schon zig Sachen versucht, u.a. das Java Tutorial zum Konvertieren von Strings.

Momentan hab ich folgendes:



```
try {
    String roundTrip = new String(shortDescr.getBytes("Cp1252"), "UTF-16");
} catch (java.io.UnsupportedEncodingException e) {
    ...
}
```

Hab auch schon folgendes versucht: 


```
try {
    byte[] utf8Bytes = shortDescr.getBytes("UTF8");

    String roundTrip = new String(utf8Bytes, "UTF8");
} catch (UnsupportedEncodingException e) {
    ...
}
```

Aber in roundTrip steht immer ein ? anstelle des ´ !!!

Was muss ich tun, damit ich die Daten aus der JSP richtig in HTML Entities konvertieren kann, bevor ich sie in der DB2 ablege?

Danke schon mal
Ciao


----------



## KSG9|sebastian (14. Mrz 2005)

ein String hat keinen Zeichensatz..siehe Forensuche!

InputStream/OutputStream verwenden ? 

Nem Byte(array) kannste glaub auch nen Zeichensatz mitgeben!


----------



## Guest (14. Mrz 2005)

KSG9|plak hat gesagt.:
			
		

> ein String hat keinen Zeichensatz..siehe Forensuche!



Schon, aber ein Characterencoding, welches man im Konstruktor und bei getBytes angeben kann.



			
				KSG9|plak hat gesagt.:
			
		

> InputStream/OutputStream verwenden ?
> Nem Byte(array) kannste glaub auch nen Zeichensatz mitgeben!



Habe folgendes bereits vorgeschalten, um das Encoding des empfangenen Strings zu bekommen:


```
java.io.InputStreamReader isr = new java.io.InputStreamReader(new java.io.ByteArrayInputStream(shortDescr.getBytes()));
```

Wenn ich den aus dem Formular im Request empfangenen String so kodiere:


```
String roundTrip = new String(shortDescr.getBytes("UTF-16"), "UTF-16");
```

Gibt mir die escapeHtml-Methode der StringEscapeUtils anstelle von '  aus! (Mit dem ASCII Code 146 dezimal legt CP1252  das ´-Zeichen ab.)

Das kanns doch wohl nicht sein, oder!?

Weiss da jmd. Rat?

Ciao


----------



## Guest (14. Mrz 2005)

Hab vergessen zu erwähnen, dass ich bei:


```
String roundTrip = new String(shortDescr.getBytes("UTF-16"), "UTF-16");
```

in der Ausgabe getBytes() verwende und mir jedes einzeln ausgeben lasse.


----------



## Bleiglanz (15. Mrz 2005)

du musst den Browser zu einem Encoding zwingen!

vor dem abschicken der JSP response.setCharaxterEncoding  + den mime-Typ + evtl. die <meta tags auf das gewünschte Encoding einstellen

beim repost der Antwort vor dem ersten Verwenden von getParameter die Methode request.setCharacterEncoding aufrufen


----------



## daLenz (15. Mrz 2005)

oder eine andere möglichkeit ist, dir einen filter zu schreiben, und diesen in der web.xml aufzurufen. somit musst du nicht überall das richtige encoding setzen, sondern nur eimal...vorausgesetzt, du willst überall dasselbe encoding verwenden...


----------



## Bleiglanz (15. Mrz 2005)

daLenz hat gesagt.:
			
		

> oder eine andere möglichkeit ist, dir einen filter zu schreiben, und diesen in der web.xml aufzurufen. somit musst du nicht überall das richtige encoding setzen, sondern nur eimal...vorausgesetzt, du willst überall dasselbe encoding verwenden...



ganz genau! wenn möglich soll man "global" ein Encoding erzwingen, sonst kanns Probleme geben (wenn etwa verschiedene JSPs an das gleiche Ziel ihre POSTs verschicken usw.)


----------



## Reth (16. Mrz 2005)

Bleiglanz hat gesagt.:
			
		

> du musst den Browser zu einem Encoding zwingen!
> 
> vor dem abschicken der JSP response.setCharaxterEncoding  + den mime-Typ + evtl. die <meta tags auf das gewünschte Encoding einstellen
> 
> beim repost der Antwort vor dem ersten Verwenden von getParameter die Methode request.setCharacterEncoding aufrufen



Hi, den MIME-Type  ignoriert der IE. Dieser ist wie folgt angegeben:


```
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=iso-8859-1">
```



			
				daLenz hat gesagt.:
			
		

> oder eine andere möglichkeit ist, dir einen filter zu schreiben, und diesen in der web.xml aufzurufen. somit musst du nicht überall das richtige encoding setzen, sondern nur eimal...vorausgesetzt, du willst überall dasselbe encoding verwenden...



Dumme Frage: Wie macht man denn sowas?

Danke
Ciao


----------



## Bleiglanz (16. Mrz 2005)

jo der IE hat ganz eigene Methoden um das Encoding rauszufinden

=> http header, meta-tag, usw.

Filter: schau mal in ein buch, oder google nach "Java Servlet Filter"


----------



## daLenz (16. Mrz 2005)

Reth hat gesagt.:
			
		

> Dumme Frage: Wie macht man denn sowas?



- eine klasse filter ("extends" HttpServlet "implements" Filter)
- init-Methode (--> auslesen des parameter-value)
- doFilter-Methode (encoding in servletrequest setzen)
- destroy-methode (kann leer gelassen werden, muss aber implementiert werden)
- filter-eintrag in web.xml mit parameter-name und parameter-value(=gewünschter encoding-typ)
- abschliessend filter noch mappen

dann mal viel spass 

greetz


----------



## Reth (17. Mrz 2005)

Danke, muss ich mal probieren!

Was ist mit Filter mappen gemeint?


----------



## daLenz (17. Mrz 2005)

google mal nach "filter-mapping"


----------



## Reth (18. Mrz 2005)

Danke!


----------

