# NumberFormat und das Euro-Zeichen



## myFrank (18. Nov 2004)

Hallo,

mein Servlet zeigt kein Euro-Zeichen sondern ein ? an. Nachfolgend der Beispielcode:

```
package core;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.text.*;

public class TestNumberFormat extends HttpServlet {
  public void doGet( HttpServletRequest request, HttpServletResponse response )
                    throws ServletException, IOException {
                      
    System.out.println("doGet... TestNumberFormat !");
    
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title    = "TestNumberFormat Beispiel";

    double test = 1234.5666;
    NumberFormat formatter = NumberFormat.getCurrencyInstance();
    
    out.println( ServletUtilities.headWithTitle(title) +
                "<body bgcolor=\"#FDF5E6\">\n" +
                "<center>\n" +
                "<h1>" + title + "</h1>" +
                "Betrag: " + formatter.format(test) + "\n" +
                "</center>\n" +
                "</body>\n" +
                "</html>" );
  }
}
```

Das Ergebnis lautet: "1.234,57 ?"  Tausenderpunkt, Komma und Runden wird berücksichtigt. Firebird 0.7 und Internet Explorer 6.0.28 zeigen das gleiche Ergebnis. Tomcat 5.0.28, Java SDK 1.4.2.05, Client OS: Windows 2000 Service Pack 4.

Puhh - kann mir da jemand weiterhelfen?


----------



## L-ectron-X (19. Nov 2004)

Probiere mal das Euro-Zeichen für HTML zu maskieren oder den Unicode für das Eurozeichen zu schreiben.
http://unicode.e-workers.de/waehrungszeich.php


----------



## myFrank (19. Nov 2004)

HTML-Maskierung und Unicode funktionieren. Beide werden korrekt in den Browsern dargestellt. NumberFormat soll laut Docu das Währungszeichen in den konvertierten String integrieren. Eine sehr arbeitssparende Klasse. Habe die folgende Zeile 

```
Locale loc = new Locale("de","DE");
```
über der NumberFormat-Zeile eingefügt. Die sollte die Länderkennung erzwingen - funktioniert aber auch nicht.  :bahnhof:


----------



## Bleiglanz (19. Nov 2004)

schon mal dran gedacht, dass das Unicode Zeichen zwar in deinem JavaString richtig drin steht, der Tomcat aber vielleicht 

in ISO-8859-1 (Latin1) ausliefert, in dem das Zeichen fehlt

(wenn du sonst nichts machst, dann nimmt der das StandardEncoding deiner Plattform)

schau mal im Browser nach, welches Encoding er erkennt (ist irgendwo in der Menüleiste)

Abhilfe
response.setCharacterEncoding("ISO-8859-15") // oder UTF-8
zur sicherheit auch noch das HTML-Meta-Tag verwenden


----------



## myFrank (19. Nov 2004)

Vielen Dank, es funktioniert.  :idea:  Damit der Fall ordentlich dokumentiert ist, nachfolgend noch einmal den Java-Source und dann den HTML-Quellcode:

```
package core;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.text.*;

public class TestNumberFormat extends HttpServlet {
  public void doGet( HttpServletRequest request, HttpServletResponse response )
                    throws ServletException, IOException {
                      
    System.out.println("doGet... TestNumberFormat !");
    
    response.setContentType("text/html");
    response.setCharacterEncoding("ISO-8859-15");   
    PrintWriter out = response.getWriter();
    String title    = "TestNumberFormat Beispiel";

    double test = 1234.5666;
    NumberFormat formatter = NumberFormat.getCurrencyInstance();
    
    out.println( ServletUtilities.headWithTitle(title) +
                "<body bgcolor=\"#FDF5E6\">\n" +
                "<center>\n" +
                "<h1>" + title + "</h1>" +
                "Unicode: &#8364 HTML: &
\n" +  // wird im Forum nicht richtig dargestellt  #8364 und euro;
                "Betrag: " + formatter.format(test) + "\n" +
                "</center>\n" +
                "</body>\n" +
                "</html>" );
  }
```
Und nun der HTML-Quellcode:

```
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>TestNumberFormat Beispiel</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
<body bgcolor="#FDF5E6">
<center>
<h1>TestNumberFormat Beispiel</h1>Unicode: &#8364 HTML: &

Betrag: 1.234,57 €

</center>
</body>
</html>
```


----------

