Hebrew rendering in website

I am working on a product which has an internet "Admin Panel" - Somewhere the user can see information about the product. One of the minimal requirements is that the website has both English and Hebrew Version. So what is the problem? The problem is that some of the characters look like this, But they should look like this.

When I get a request from a browser I read an HTML file using this code (JAVA):

public static String loadPage(String page, String lang) {
    Path path = Paths.get(System.getProperty("user.dir"), "htmlTemplate", lang, page + ".html");
    try (BufferedReader br = Files.newBufferedReader(path)) {
        StringBuilder website = new StringBuilder();
        String currentLine;
        while ((currentLine = br.readLine()) != null) {
            website.append(currentLine);
        }
        return website.toString();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

(Thanks to Jon Skeet for helpig with reading it as UTF-8), After I read the file I am replacing some of the comments to with the correct data (For example: I have a comment like this: <!--username--> and I replace it with "Itay"), After the replacing I just send the response.

The server itself is hosted using sun's HttpServer.

I also made sure to do these things:

  • I saved the html file as UTF-8
  • In the html file there is this meta tag: <meta charset="UTF-8">"
  • One of the response headers is: Content-Type=text/html;charset=utf-8

By the way i am using Chrome.

So I hope I gave enough details about my problem and if you need more feel free to tell me!

(I also hope I posted the question with the right tags and title)

Jon Skeet
people
quotationmark

Basically, don't use FileReader. It always uses the platform-default encoding, which may well not be appropriate for this file.

If you're using a modern version of Java, it's better to use:

Path path = Paths.get(System.getProperty("user.dir"), "htmlTemplate", lang, page + ".html");
br = Files.newBufferedReader(path);

That will read in UTF-8 by default - if you wanted a different charset, you can specify it as another argument to newBufferedReader.

I'd also advise you to use a try-with-resources statement to get rid of all the cruft with a manual finally block:

Path path = Paths.get(System.getProperty("user.dir"), "htmlTemplate", lang, page + ".html");
try (BufferedReader br = Files.newBufferedReader(path)) {
    StringBuilder website = new StringBuilder();
    String currentLine;
    while ((currentLine = br.readLine()) != null) {
        website.append(currentLine);
    }
    return website.toString();
}

That will remove all line breaks, mind you. (Note that I've used StringBuilder to avoid performance issues from repeated string concatenation...)

people

See more on this question at Stackoverflow