...

View Full Version : Java ASCII file output



jmace
02-02-2012, 01:06 AM
When I try to output an ASCII value to a file, it sometimes writes 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.

alykins
02-02-2012, 11:03 AM
After 128 you enter extended ASCII which it is not handling and is serving up a "?" if you put in watch window it actually will return blank- you need to convert extended ASCII to a byte[] and then display it accordingly


public class demo {
public static void main(String[] args) throws IOException {
System.out.println("demo");
int b = 147;
char _b = (char)b;
String B = Character.toString(_b);
byte[] bb = B.getBytes("UTF-32");
System.out.println(new String(bb, "MacGreek"));
}


here are some ref langs: link (http://docs.oracle.com/javase/1.3/docs/guide/intl/encoding.doc.html)



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum