当我尝试将ASCII值输出到文件时,使用某些字符会返回错误的值。例如:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintWriter;
public class test {
public static void main(String args[]){
//Supposed to:
writeFile("./test.txt"); //write ASCII 147
readFile("./test.txt"); //read ASCII 147
}
public static boolean writeFile(String path){
try{
PrintWriter fo = new PrintWriter(new FileOutputStream(new File(path)));
fo.print((char) 147); //WRITES "?" TO FILE (ASCII 63, NOT 147)
fo.close();
}catch(Exception e){
return true;
}
return false;
}
public static boolean readFile(String path){
try {
BufferedReader fi = new BufferedReader(new FileReader(path));
char c[] = fi.readLine().toCharArray();
System.out.println((int) c[0]); //OBVIOUSLY PRINTS 63 INSTEAD OF 147
fi.close();
return true;
} catch (Exception e){
e.printStackTrace();
return false;
}
}
}
我做错了什么?任何帮助都会很棒。感谢。
答案 0 :(得分:6)
ASCII中没有“字符147”这样的东西。
你应该给出一个可以代表你感兴趣的角色的特定编码 - UTF-8通常是一个不错的选择 - 并且使用相同的编码进行读写。
不幸的是,FileWriter
和FileReader
不允许您指定编码,因此您需要将FileOutputStream
和FileInputStream
包含在OutputStreamWriter
中, InputStreamReader
:
import java.io.*;
import java.nio.charset.*;
public class Test {
private static Charset UTF8 = Charset.forName("UTF-8");
public static void main(String args[]) throws IOException {
writeFile("./test.txt");
readFile("./test.txt");
}
public static void writeFile(String path) throws IOException {
Writer writer = new OutputStreamWriter(new FileOutputStream(path), UTF8);
try {
writer.write((char) 147);
} finally {
writer.close();
}
}
public static void readFile(String path) throws IOException {
Reader reader = new InputStreamReader(new FileInputStream(path), UTF8);
try {
int c = reader.read();
System.out.println(c);
} finally {
reader.close();
}
}
}
答案 1 :(得分:0)