使用了InputStreamReader进行编码转换,但是输出的汉字还是乱码

来源:4-4 JDOM 解析时乱码的处理

阿西莫夫

2017-12-10 10:00

package com.imooc.jdomtest;


import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.List;


import org.jdom2.Attribute;

import org.jdom2.Document;

import org.jdom2.Element;

import org.jdom2.JDOMException;

import org.jdom2.input.SAXBuilder;



public class JDOMTest {


/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//进行对books.xml文件的JDOM解析

//准备工作

//1.创建一个SAXBuilder对象

SAXBuilder saxBuilder = new SAXBuilder();


InputStream in;

try {

//2.创建一个输入流,将XML文件加载到输入流中来

in = new FileInputStream("src/res/books.xml");

InputStreamReader isr =new InputStreamReader(in, "UTF-8");

//3.通过saxBuilder的build方法,将输入流加载到saxBuilder中

Document document= saxBuilder.build(isr);

//4.通过document对象获取xml文件的根节点

Element rootelement = document.getRootElement();

//5.获取根节点下的子节点的List集合

List<Element> bookList = rootelement.getChildren();

//继续进行解析

for (Element book : bookList) {

System.out.println("=======开始解析第"

+ (bookList.indexOf(book) + 1) + "书=======");

//解析book的属性

List<Attribute> attrList = book.getAttributes();

//知道节点下属性名称时,获取属性值

// book.getAttributeValue("id");

//遍历attrList(针对不清楚book节点下属性的名字及数量)

for (Attribute attr : attrList) {

//获取属性名

String attrName = attr.getName();

//获取属性值

String attrValue = attr.getValue();

System.out.println("属性名:" + attrName +"---属性值:" +attrValue);

}

//对book节点的子节点的节点名以及节点值的遍历

List<Element> bookChilds = book.getChildren();

for (Element child : bookChilds) {

System.out.println("节点名:" + child.getName() + "------节点值:"

+ child.getValue());

}

System.out.println("=======结束解析第"

+ (bookList.indexOf(book) + 1) + "书=======");

}

}catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch (JDOMException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}


写回答 关注

1回答

  • derotyoung
    2017-12-10 10:12:02
    已采纳

    InputStreamReader isr =new InputStreamReader(in, "UTF-8");--->InputStreamReader isr =new InputStreamReader(in, "gbk");  就可以了

    因为项目的Resource---->Text file encodeing---->Inherited from container (GBK)

    阿西莫夫

    项目的Resource---->Text file encodeing---->Inherited from container (GBK),的确为默认GBK 把new InputStreamReader(in, "gbk"); 设置为gbk也没用,依然乱码。 尝试只有新建项目时,项目的Resource---->Text file encodeing---->Inherited from container(UTF-8),才能正常转换编码格式为ISO-8859-1的books.xml文件编码

    2017-12-10 15:07:27

    共 1 条回复 >

Java眼中的XML---文件读取

通过Java认识并且创造XML文件,如何应用 Java“解析 XML

83199 学习 · 431 问题

查看课程

相似问题