Java读取文件当中的汉字会产生乱码,请问这个问题怎么解决?
//以下是我做朱喜福《Java程序设计》(第二版)的第7章,第40题 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class Class7_40_TextTest extends JFrame implements ActionListener{ /** * */ private static final long serialVersionUID = 1L; JTextArea txt=new JTextArea(); JMenuBar menuBar=new JMenuBar(); JMenu[] menu; JMenuItem[][] menuItem; Color color=Color.black; public Class7_40_TextTest(){ this.setTitle("菜单使用"); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container content=this.getContentPane(); content.setLayout(new BorderLayout()); String[] menuName={"文件","字体设置"}; String[][] ItemName={{"新建","打开","保存","关闭程序"},{"字体大小","字体颜色"}}; menuBar.setVisible(true); menu=new JMenu[menuName.length]; for(int i=0;i menu[i]=new JMenu(menuName[i]); menuBar.add(menu[i]); } menuItem=new JMenuItem[ItemName.length][]; for(int i=0;i menuItem[i]=new JMenuItem[ItemName[i].length]; for(int j=0;j menuItem[i][j]=new JMenuItem(ItemName[i][j]); if(i==0&&j==3){ menu[i].addSeparator(); } menuItem[i][j].addActionListener(this); menu[i].add(menuItem[i][j]); } } this.setJMenuBar(menuBar); content.add(new JScrollPane(txt),BorderLayout.CENTER); this.setBounds(200,200,800,500); } public void actionPerformed(ActionEvent e){//新建 if(e.getSource()==menuItem[0][0]){ txt.setText(""); } else if(e.getSource()==menuItem[0][1]){//打开 JFileChooser fileChooser=new JFileChooser("./"); int result=fileChooser.showOpenDialog(this); if(result==JFileChooser.APPROVE_OPTION){ File file=fileChooser.getSelectedFile(); try { FileReader fr=new FileReader(file); String str="",s=""; BufferedReader br=new BufferedReader(fr); while((str=br.readLine())!=null){ s+=str+"\n"; } txt.setText(s); br.close(); fr.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } else if(e.getSource()==menuItem[0][2]){//保存 JFileChooser fileChooser=new JFileChooser("./"); int result=fileChooser.showSaveDialog(this); if(result==JFileChooser.APPROVE_OPTION){ File file=fileChooser.getSelectedFile(); try { FileWriter fw=new FileWriter(file); String str=txt.getText(); for(int i=0;i if(str.charAt(i)==10){ fw.write(13); fw.write(10); } else{ fw.write(str.charAt(i)); } } fw.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } else if(e.getSource()==menuItem[0][3]){//关闭程序 this.dispose(); System.exit(0); } else if(e.getSource()==menuItem[1][0]){//字体大小 int n; String str=JOptionPane.showInputDialog("输入字体大小"); try{ n=Integer.parseInt(str); txt.setFont(new Font(txt.getFont().getFontName(),Font.PLAIN,n)); } catch(NumberFormatException m){ JOptionPane.showMessageDialog(this, "输入的信息不是是数字"); m.printStackTrace(); } } else if(e.getSource()==menuItem[1][1]){//字体颜色 color=JColorChooser.showDialog(this, "设置字体颜色", color); txt.setForeground(color); } } public static void main(String args[]){ new Class7_40_TextTest(); } }
java 文件IO 读取乱码问题
请贴出代码,谢谢。
请关闭输入流,释放资源,谢谢。
调用close()方法。
其他貌似没有发现什么问题。
public static String run(String filename){WordExtractor extractor=null;String text=null;try{FileInputStream in = new FileInputStream (filename);extractor = new WordExtractor();text=extractor.extractText(in);}catch(Exception ex){//logreturn null;}return text;}public static void main(String[] args){try{FileOutputStream out=new FileOutputStream("result.txt");out.write(WordProcess.run(args[0]).getBytes());out.flush();out.close();}catch(Exception ex){System.out.println(ex.toString());}}看看这个。
模范这样写,试试看。
这个代码我试过,没问题,如果这样写还是有问题,那就不是代码的问题了。
java,io,从文件中读取中文出现乱码,求修改bug
readWord()的方法修改建议如下DataInputStream input ; input.readLine()这种方式读取一行 已经过时,强烈不建议使用!可以使用BufferedReader.readLine()来读取一行, 并且可以指定需要的编码格式BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "gbk"));writeWords()的修改建议如下for(int i = 0;i<list.size();i++) {//i<=list.size()会造成下标越界 修改成i<list.size()out.print(list.get(i).toString());out.println();//换行 , 因为读取的时候,是按照一行一行读取的 ,所以保存的时候也要按一行一行的保存}
jsp调用java类,实现将html保存为word时出现部分乱码
展开全部 有如下几种解决办法:1、保证项目的字符编码和每一个jsp页面的字符编码一致,如果不一致可能导致中文乱码问题2、编写Filter过滤器,在过滤器的过滤方法doFilter中写 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); 在web.xml中配置如下信息,过滤全部请求 characterFilter 自定义Filter类的全限定类名 characterFilter /* 3、在web.xml中加入jsp配置信息 For config the web application JSPConfiguration *.jsp false UTF-8 在jsp中以上三种方式均可以实现,建议选择第二种方式,针对任意请求,jsp和servlet都可以解决中文问题
看网页时某些字乱码 怎么办
汉字乱码现象大致可分成四类:网页、文本、文档和文件乱码。
第一类是由于港台的繁体中文大五码(BIG5)与大陆简体中文(GB2312)不通用造成的;第二类是Win9X/Win2K系统(菜单、桌面、提示框)显示乱码,这是Win9X/Win2K注册表中有关字体的部分设置不当引起的;第三类是各种应用程序(包括游戏)本来显示中文的地方出现乱码,形成原因比较复杂,有第二类的乱码原因,也可能是软件用到的中文动态链接库被英文动态链接库覆盖造成的;最后一类是邮件乱码。
二、消除汉字乱码 针对以上几种乱码现象,我们来分类介绍消除乱码的方法。
(一)、网页、文本和文档文件乱码的消除 网页乱码是浏览器(如IE等)对HTML网页解释时形成的。
如果在网页的代码中有形如:〈HTML〉〈HEAD〉〈META CONTENT=“text/html;charset=utf-8”〉〈/HEAD〉……〈/HTML〉的语句,浏览器在显示此页时,就会出现乱码。
因为浏览器会将此页语种辨认为“欧洲语系”。
解决的办法是将语种“ISO-8859-1”改为GB2312,如果是繁体网页则改为BIG5。
另一种解决办法是不修改网页代码,事先为浏览器安装多语言支持包(例如在安装IE时要安装多语言支持包),这样在浏览网页出现乱码时,就可以在浏览器中选择菜单栏下的“查看”/“编码”/“自动选择”/简体中文(GB2312),如为繁体中文则选择“查看”/“编码”/“自动选择”/繁体中文(BIG5),其它语言依此类推选择相应的语系,这样可消除网页乱码现象。
还有一种解决办法是利用多内码显示平台来转换内码。
常用多内码显示平台有: “南极星”:可自动识别GB码、BIG5码,用简体或繁体显示,并能做到同屏显示GB码和BIG5码,对日文、韩文亦能正确显示。
下载地址:http:// www.njstar.com“四通利方”:支持了包括GB、BIG5、HZ、日韩编码、UNICOD等17种汉字内码,也开始支持预览功能,并且增加了诸如“增删空格”、“插入禁排空格”等小而有用的功能,实在是网友的好帮手。
下载地址:http:// www.srsnet.com“MagicWin 98”:可真正的同屏显示不同内码,即GB码和BIG5码两者共存、都能正常显示。
它支持GB、HZ、BIG5、JIS、EUC、SJIS、KSC、UTF7和UTF8等格式;支持Netscape Communicator 4.X、Internet Explorer 和Office 等软件;支持在多个窗口中同时查看不同内码的文档的超级多内码显示平台。
下载地址:http:// www.itwin.com.my/magicwin网页无乱码保存的方法是:用浏览器打开网页时,在“查看”/“编码”中选择“自动选择”,存盘时保存类型选“web页”,编码选择“UNICOD”,这样保存过的网页再次打开时,在浏览器菜单“查看”、“编码”中不管选择简体中文(GB2312)、简体中文(HZ)还是UNICODE(UTF-8)或繁体中文(BIG5),最终显示都不会出现乱码。
文本、文档文件乱码,一般是繁体中文显示在简体中文系统下或者相反情况造成的。
只要把原本是繁体的内码转换为简体内码(或者相反),就可消除乱码。
Word2000能胜任这类工作,例如要把繁体中文转换为简体中文,方法是:选择要转换内码的文件,在弹出的对话框中(如图1),选择“其它编码”中的“繁体中文(BIG5)”一项,打开此文件时就不会出现乱码。
无乱码保存方法:在保存时选择“文件”中的“另存为”,先存为“Word文档,存盘后打开再存为纯文本等其它格式;您也可以用Word2000的“中文简繁转换”工具实现无乱码保存,方法是在菜单栏中选择“工具/语言/中文简繁转换”,内码转换后再保存。
WPS2000也能转换内码,支持GB2312、BIG5、GBK等三种主要的汉字编码,并可在输出RTF、TXT、HTM格式文件时对内码进行转换。
转载请注明出处51数据库 » java读取word出现乱码问题