Codename One中的Unicode文件IO

时间:2014-06-05 08:26:17

标签: codenameone

我想读取一个Unicode文件(UTF-8)并将其写回另一个文件。

我用于阅读的代码是(如Textscreen in Codename One, how to read text file?中所示)

final String textFile = "/readme.txt";
String text = "";

InputStream in = Display.getInstance().getResourceAsStream(null, textFile);

if (in != null){
    try {
        text = com.codename1.io.Util.readToString(in);
        in.close();
    } catch (IOException ex) {
        System.out.println(ex);
        text = "Read Error";
    }
}

我甚至尝试过

text = com.codename1.io.Util.readToString(in,"UTF-8");

DataInputStream dis = new DataInputStream(in);
text = com.codename1.io.Util.readUTF(dis);

但我不是Unicode不会被阅读。

我正在写作,

String content = "Some Unicode String";
OutputStream stream = fs.openOutputStream(path + "/" + fileName);
stream.write(content.getBytes());
stream.close();

并试过,

DataOutputStream dos = new DataOutputStream(stream);
dos.writeUTF(content);

我观察到生成的文件是ANSI编码。

更新:解决方案

根据@ Shai的回复,

阅读:

// For text file in package structure
InputStream in = Display.getInstance().getResourceAsStream(null, "/" + textFile);

// For file in file system
InputStream in = fs.openInputStream(textFile);


if (in != null) {
  try {
      text = com.codename1.io.Util.readToString(in, "UTF-8"); // Encoding
      in.close();
  } catch (IOException ex) {
      text = "Read Error";
  }
}

写:

OutputStream stream = fs.openOutputStream(textFile);
stream.write(content.getBytes("UTF-8"));
stream.close();

1 个答案:

答案 0 :(得分:2)

readToString()方法使用UTF-8编码进行读取。如果您使用ASCII / ANSI编码之一编码文件,则需要将其修复为UTF-8或指定该方法的特定编码。

来自readUT

DataInputStream F是针对编码流而非文本文件设计的完全不同的东西。 DataInputStream一般不适用于Java中的文本文件,您应该使用Reader / InputStreamReader来处理这类内容。

getBytes()使用特定于平台的编码,这很少是您希望使用的getBytes(String)