你想转码?我试了一下,不知是不是你想要的结果。我没有转码,也没有作任何处理,可以读出big5的文件,也可以写入big5的文件。下面是源码,其中test.txt是一个big5编码的文本文件。
package hztest;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;import java.io.*;public class Frame1 extends JFrame {
JPanel contentPane;
JTextArea jTextArea1 = new JTextArea();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton(); /**Construct the frame*/
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
jTextArea1.setBounds(new Rectangle(16, 11, 272, 166));
//setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
this.setSize(new Dimension(400, 300));
this.setTitle("Frame Title");
jButton1.setText("read");
jButton1.setBounds(new Rectangle(13, 200, 89, 30));
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jButton2.setText("save");
jButton2.setBounds(new Rectangle(121, 200, 82, 30));
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
contentPane.add(jTextArea1, null);
contentPane.add(jButton1, null);
contentPane.add(jButton2, null);
}
/**Overridden so we can exit when window is closed*/
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
} void jButton1_actionPerformed(ActionEvent e) {
try{
BufferedReader in = new BufferedReader(new FileReader("test.txt"));
String s;
while( (s=in.readLine())!=null ){
jTextArea1.append(s);
jTextArea1.append(System.getProperty("line.separator"));
System.out.println(s);
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
} void jButton2_actionPerformed(ActionEvent e) {
try{
PrintWriter out = new PrintWriter(new FileWriter("test2.txt"));
out.println(jTextArea1.getText());
System.out.println(jTextArea1.getText());
out.close();
}catch(Exception ex){
System.out.println(ex.getMessage());
} }
}
FileWriter.write(new string(string_code, "BIG5"("Big5"我也用过));
你试试再写入的时候不作转码!
to ksxy:我一直不知道你的问题到底是什么?我测试的结果是可以打开一个big5的文本文件,你测试一下可以吗?
如果可以,再试一下保存一段big5的文本,是否可以?有空交流吧。
好了,刚才是我弄错了,我系统的编码不对。现在我测试完成,应是这样的:读入时,用
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("test3.txt"),"Big5"));test3.txt是一个big5编码的文本文件。读入后不用再转码了。输出时,用
PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("test4.txt"),"Big5"));这样输出的test4.txt的编码也是big5了,如果你不这样输出,它会变成gb2312,因为我的默认编码是gb2312。问题解决,给分吧!!!
我是win2000pro,版,默认编码是中文(简体)。我先改成中文繁体,做了一个文件,输入了几个汉字。保存成test3.txt文件,把系统改回成简体,然后直接看这个文件,发现乱码,因为它是big5码的,然后我用下面的程序打开它,直接显示是可以的,在保存时也做了处理,生成的test4.txt也是乱码,但是与test3是一样的乱,所以说明仍是big5码没错。我的源码是这个:package hztest;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;import java.io.*;public class Frame1 extends JFrame {
JPanel contentPane;
JTextArea jTextArea1 = new JTextArea();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton(); /**Construct the frame*/
public Frame1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
jTextArea1.setBounds(new Rectangle(16, 11, 272, 166));
//setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(null);
this.setSize(new Dimension(400, 300));
this.setTitle("Frame Title");
jButton1.setText("read");
jButton1.setBounds(new Rectangle(13, 200, 89, 30));
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jButton2.setText("save");
jButton2.setBounds(new Rectangle(121, 200, 82, 30));
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
contentPane.add(jTextArea1, null);
contentPane.add(jButton1, null);
contentPane.add(jButton2, null);
}
/**Overridden so we can exit when window is closed*/
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
} void jButton1_actionPerformed(ActionEvent e) {
try{
// BufferedReader in = new BufferedReader(new FileReader("test3.txt"));
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("test3.txt"),"Big5"));
String s;
while( (s=in.readLine())!=null ){
// s = new String(s.getBytes("BIG5"),"GB2312");
jTextArea1.append(s);
jTextArea1.append(System.getProperty("line.separator"));
System.out.println(s);
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
} void jButton2_actionPerformed(ActionEvent e) {
try{
// PrintWriter out = new PrintWriter(new FileWriter("test4.txt"));
PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("test4.txt"),"Big5"));
out.println(jTextArea1.getText());
System.out.println(jTextArea1.getText());
out.close();
}catch(Exception ex){
System.out.println(ex.getMessage());
} }
}=======================================
package hztest;import javax.swing.UIManager;
import java.awt.*;public class Application1 {
boolean packFrame = false; /**Construct the application*/
public Application1() {
Frame1 frame = new Frame1();
//Validate frames that have preset sizes
//Pack frames that have useful preferred size info, e.g. from their layout
if (packFrame) {
frame.pack();
}
else {
frame.validate();
}
//Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
/**Main method*/
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
new Application1();
}
}
如果正确,别忘了给分哦...
楼上说的对,如果我在写出时不做这样的处理:
PrintWriter out = new PrintWriter(new OutputStreamWriter(new FileOutputStream("test4.txt"),"Big5"));虽然生成的文件也看上去是繁体,但其实是gb2312的编码,也就是说在gb2312下可正常显示的繁体。
做了处理,强制转成了big5,生成的文件在gb2312下就显示乱码了。
String str = "中國";
FileOutputStream fileOut = new FileOutputStream("C:\\1.txt");
fileOut.write(str.getBytes("BIG5"));
这样将把一个大五码的数据写进文件。读的时候:
FileInputStream fileIn = new FileInputStream("C:\\1.txt");
byte[] btarr = new byte[fileIn.avaliable()];
fileIn.read(btarr);
String str = new String(btarr, "BIG5");没有测试,你试试吧。
kiddycoffee这种写法真的不行的!我试过。只能用 改变*流*的编码 的方式实现!!!!不是 改变*字串*的编码 !!!