Java ASCII 输出到文件
当我尝试将 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;
}
}
}
我做错了什么?任何帮助都会很棒。谢谢。
When I try to output an ASCII value to a file, with some characters it returns the wrong value. Example:
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;
}
}
}
What am I doing wrong? any help would be great. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
ASCII 中没有“字符 147”这样的东西。
您应该给出一个可以表示您感兴趣的字符的特定编码 - UTF-8 通常是一个不错的选择 - 并使用相同的编码进行读取和写入。
不幸的是
FileWriter
和FileReader
不允许您指定编码,因此您需要FileOutputStream
和FileInputStream
包装在OutputStreamWriter
和InputStreamReader
中:There's no such thing as "character 147" in ASCII.
You should give a specific encoding which can represent the characters you're interested in - UTF-8 is usually a good choice - and use the same encoding for both reading and writing.
Unfortunately
FileWriter
andFileReader
don't allow you to specify the encoding, so you'll needFileOutputStream
andFileInputStream
wrapped in anOutputStreamWriter
andInputStreamReader
:某些语言将字符和八位字节类型混为一谈(C 和 C++ 是值得注意的例子。)Java
char
类型隐式为 UTF-16,并且 ASCII 必须使用byte
类型表示。请参阅此处进行比较。请参阅此处获取 Java 编码指南。Some languages conflate the character and octet types (C and C++ being notable examples.) Java
char
types are implicitly UTF-16 and ASCII would have to be represented using thebyte
type. See here for a comparison. See here for a Java encoding guide.