在Java创建的HTML文件中表示日语字母

时间:2018-07-05 23:59:29

标签: java html character-encoding jtextarea

我想将日语字母写到Java创建的HTML文件中。为此,我创建了一个FileOutputStream,并在目标位置(如桌面文档)创建了一个.html文档。我在我的Java代码中写了一些HTML代码,因此它可以正确翻译:

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,将语言声明为日语,创建的文件也向我显示了一些随机符号...

有关信息:该代码将JTextAreaString)处的给定代码直接转换为嵌入HTML的文档。给定的地址作为FileOutputStream的参数只是创建的文件应出现的目的地。

方法setAdress只是这些地址的设置方法。

1 个答案:

答案 0 :(得分:3)

请勿使用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();
}