我想读取一个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();
答案 0 :(得分:2)
readToString()
方法使用UTF-8编码进行读取。如果您使用ASCII / ANSI编码之一编码文件,则需要将其修复为UTF-8或指定该方法的特定编码。
readUT
的 DataInputStream
F是针对编码流而非文本文件设计的完全不同的东西。 DataInputStream
一般不适用于Java中的文本文件,您应该使用Reader
/ InputStreamReader
来处理这类内容。
getBytes()
使用特定于平台的编码,这很少是您希望使用的getBytes(String)
。