Представление японских букв в созданном Java-файле HTML - PullRequest
0 голосов
/ 06 июля 2018

Я хочу писать японские буквы в HTML-файл, созданный Java. Для этого я создал FileOutputStream, создав документ .html в месте назначения (например, рабочий стол, документы). Я написал некоторый HTML-код в свой Java-код, чтобы он правильно его перевел:

package main;

import java.io.DataOutputStream;

public class Streamer {
  static String address;
  static String output;

  public Streamer() {}

  static String html_begin = "<!DOCTYPE html><html><body>";
  static String header = "<head><meta lang=\"japanese\" charset=\"unicode\"></head>";
  static String html_end = "</html></body>";

  public static void output(String s, String s2) {
    address = s2;
    output = s;
    setAddress(s2);


    try
    {
      DataOutputStream stream = new DataOutputStream(new java.io.FileOutputStream(address));
      stream.writeBytes(html_begin);
      stream.writeBytes(header);
      stream.writeBytes(output);
      stream.writeBytes(html_end);


      stream.close();
    }
    catch (java.io.IOException localIOException) {}
  }

.....}

Даже с объявлением кодировки как Unicode и языка как японского, созданный файл показывает мне некоторые случайные знаки ...

Для информации: код напрямую преобразует данный код с JTextArea (String) в документ, внедренный в HTML. Данный адрес в качестве аргумента FileOutputStream является просто местом назначения, в котором должен появиться созданный файл.

Метод setAdress является просто методом установки этих адресов.

1 Ответ

0 голосов
/ 06 июля 2018

Не используйте DataOutputStream для записи текстовых файлов. Используйте Writer для записи текстовых файлов. Еще лучше использовать PrintWriter.

Чтобы писать текстовые файлы с японскими символами, необходимо, чтобы файл был закодирован в наборе символов, который поддерживает японские символы, например, UTF-8 или UTF-16.

Кроме того, вы должны использовать try-with-resources .

try (PrintWriter out = new PrintWriter(Files.newBufferedWriter(Paths.get(address), StandardCharsets.UTF_16))) {
    out.println(html_begin);
    out.println(header);
    out.println(output);
    out.println(html_end);
} catch (IOException e) {
    e.printStackTrace();
}

До Java 7 вы написали бы:

try (PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(address), "UTF-16")))) {
    out.println(html_begin);
    out.println(header);
    out.println(output);
    out.println(html_end);
} catch (IOException e) {
    e.printStackTrace();
}
...