java 创建XML 中问乱码问题

来源:互联网 发布:mac连不上app store 编辑:程序博客网 时间:2024/06/06 08:52
package com.maple.util;
//package com.maple.util;
//
//import java.util.Date;
//
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileReader;
//import java.io.FileWriter;
//import java.text.SimpleDateFormat;
//
//import javax.xml.parsers.DocumentBuilder;
//import javax.xml.parsers.DocumentBuilderFactory;
//import javax.xml.transform.Result;
//import javax.xml.transform.Source;
//import javax.xml.transform.Transformer;
//import javax.xml.transform.TransformerFactory;
//import javax.xml.transform.dom.DOMSource;
//import javax.xml.transform.stream.StreamResult;
//
//import org.dom4j.DocumentHelper;
//import org.dom4j.io.OutputFormat;
//import org.dom4j.io.XMLWriter;
//import org.w3c.dom.Document;
//import org.w3c.dom.Element;
//
//
//public class CreateXml {
//
// /**
// * @param args
// */
// public static void main(String[] args) {
// // TODO Auto-generated method stub
// // TODO Auto-generated method stub
// try {
// //鍒涘缓涓�釜绌虹櫧鐨剎ml鏂囨。
//
// File file =new File("F:\\mycountry.txt");
//        BufferedReader input = new BufferedReader(new FileReader(file));
//        String str = null;
//        String[]  array =null; 
// DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
// Document document = documentBuilder.newDocument(); //鍦ㄥ唴瀛樹腑鏂板垱寤轰竴涓獂ml鏂囨。
//
// //涓簒ml鏂囨。娣诲姞鍐呭
// Element rootElement = document.createElement("Countrys"); //鍒涘缓鏍瑰厓绱狅紝鍙湁document瀵硅薄鎵嶅彲浠ュ垱寤哄厓绱�country
// document.appendChild(rootElement);  //灏嗘牴鍏冪礌娣诲姞鍒皒ml鏂囨。涓�
//         while((str=input.readLine())!=null){
//          
//             array = str.split(":");
//
//
//
//
//
// Element employeeElement = document.createElement("country"); //鍒涘缓employee瀛愬厓绱�
// String s2 = new String(array[1].getBytes("ISO-8859-1"),"GBK");
// String s1 = new String(array[0].getBytes("ISO-8859-1"),"GBK");
// employeeElement.setAttribute("name", s2);//涓鸿鑺傜偣璁剧疆灞炴�鍜屽�
// employeeElement.setAttribute("number",s1);
// rootElement.appendChild(employeeElement);//娣诲姞鍒版牴鍏冪礌涓�
//         }
//
// //Element nameElement = document.createElement("name");
// //nameElement.setTextContent(employee.getName()); //璁剧疆璇ヨ妭鐐圭殑鏂囨湰鍐呭
// //employeeElement.appendChild(nameElement);
//
// //Element ageElement = document.createElement("age");
// //ageElement.setTextContent(employee.getAge().toString()); //璁剧疆璇ヨ妭鐐圭殑鏂囨湰鍐呭
// //employeeElement.appendChild(ageElement);
//
// //Element sexElement = document.createElement("sex");
// //sexElement.setTextContent(employee.getSex()); //璁剧疆璇ヨ妭鐐圭殑鏂囨湰鍐呭
// //employeeElement.appendChild(sexElement);
//
// //SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
// // Element birthdayElement = document.createElement("birthday");
// //birthdayElement.setTextContent(dateFormat.format(employee.getBirthday())); //璁剧疆璇ヨ妭鐐圭殑鏂囨湰鍐呭
// ///employeeElement.appendChild(birthdayElement);
//
// //淇濆瓨xml鏂囨。鍒扮‖鐩樹笂
// TransformerFactory transformerFactory = TransformerFactory.newInstance();
// Transformer transformer = transformerFactory.newTransformer();
// Source xmlSource = new DOMSource(document); //鏍规嵁鍐呭瓨涓殑xml鏂囨。鍒涘缓涓�釜璧勬簮
// Result outputTarget = new StreamResult(new File("F:\\employees.xml")); //浠ユ祦鐨勬柟寮忚緭鍑哄埌鐩殑鍦帮紝鍗充繚瀛樿矾寰�  杩欓噷鍐欐浜嗕繚瀛樿矾寰�
// transformer.transform(xmlSource, outputTarget);//绗竴涓弬鏁帮細瑕佷繚瀛樼殑璧勬簮  绗簩涓弬鏁帮細淇濆瓨鐨勭洰鐨勫湴
//
// } catch (Exception e) {
// e.printStackTrace();
// }
//
//
// }
//
//
//
//
//
//
//}




//package com.zjm.xml;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
 
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
 
public class CreateXML {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        CreateXML xml = new CreateXML();
        xml.create();
    }
     
    public boolean create() {
        boolean flag = false;
        Document document = null;        //文档
        Element books = null;            //根节点
        Element book = null;            //book节点
        Element text = null;            //text节点
        OutputFormat format = null;
        XMLWriter writer = null;
        String str = null;        
        String[] array =null;


         
        try {
            document = DocumentHelper.createDocument();
            books = document.addElement("Countrys");
            books.addComment("注释");
            
            File file =new File("F:\\mycountry.txt");
            try 
            {
    BufferedReader instreamPut = new BufferedReader(new FileReader(file));
            
            while( (str = instreamPut.readLine())!=null){
         
             array = str.split(":");
            // String s2 = new String(array[0].getBytes("ISO-8859-1"),"gb2312");
            // String s1 = new String(array[1].getBytes("ISO-8859-1"),"gb2312");
            book = books.addElement("country");
            book.addAttribute("name", array[1]);
            book.addAttribute("number", array[0]);
            //text = book.addElement("text");
           // text.setText("text1");
             
           // book = books.addElement("book");
           // book.addAttribute("name", "book2");
           // book.addAttribute("show", "false");
           // text = book.addElement("text");
           // text.setText("text2");
             


            }
            format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");
            //format.setEncoding("utf-8");    //用utf-8也不行
             
          //  System.out.println(document.asXML());
             
            writer = new XMLWriter(new FileOutputStream("E://mytext.xml"), format);//FileOutputStream
            writer.write(document);
            writer.close();
             
            flag = true;
             
            return flag;
        
} catch (FileNotFoundException e1) 
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        return flag;
    }
 

}


问题:

我用java开发的,根据业务需要,要把字符集为ascii的byte[],转为中文?如String chinaString = "你好";byte[] cascii = chinaString.getBytes("US-ASCII");有什么方法以将 byte[] cascii 里的内容,转为中文? 

 

问题补充:
String s1 = new String(chinaString.getBytes("US-ASCII"),"GB2312");  String s2 = new String(chinaString.getBytes("US-ASCII"),"UTF-8");  String s3 =new String(chinaString.getBytes("ISO-8859-1"),"GBK");和其他的字节符都方试过了,都不行!打印出来的都是:??  回:寻找逆流的鱼  -- 不是我想用ACSII码,而是前面我说了是业务需要,对方的接口返回给我的就是这样,我也很无耐。所以在这里向大侠们请教!
回答:
看了几位的回答,感觉有点好笑,楼主本身就出了一个假命题,几位回答都没有弄清字符集的转换,楼主也不知道自己本身就犯了一个致命错误,“你好”本身就是一个多位编码,你却硬要用低位码去解码,不出错才怪呢?String s1 =new String(chinaString.getBytes("gb2312"),"ISO-8859-1");这里的gb2312可以省略,系统会默认用你控制面板设定好的字符集,因为原来“你好”是多位编码,所以必须用多位编码去解码,也就是gb2312或utf-8去解码,这样chinaString.getBytes("gb2312")就变成一个byte数组,这时候你可以随意重新指定编码如iso-8859-1,这是s1就变成一个是iso-8859-1编码的字符串,如果你想重新转为中文,那么,你用什么字符集编码的,必须用什么字符集来解码,这里是iso-8859-1,可以这么来做String s2 = new String(s1.getBytes("ISO-8859-1"),"gb2312");这样s2又重新变回中文了,所以当你打印s2时,就是“你好”。还有一个问题,为什么这里用iso-8859-1来重新编码,而不用其他的字符集呢?这里因为,其他字符集无法相互转码而发生编码丢失现象,你可以试试,把iso-8850-1换成utf-8试试,这无法重新转回来,这导致乱码现象,如果你ios-8850-1换成gbk,大部分是可以的,因为gbk兼容gb2312,但是,不是所有的都能相互转回来,最好用iso-8850-1来作为中间转码字符集,这是因为所有的字符集都对iso-8859-1兼容,不管是gbk还是gb2312,utf-8,都能完美地转换回来。说了这么多,可能大家还有点迷糊,这应用在什么地方。我举个例子,大家知道,经常有人做网络爬虫,把网页下载下来,但是,网页编码各种各样,主要有iso-8859-1,gbk,gb2312,utf-8,网页以io字节流下载下来,要想把它转换字符流,也就是文字,这时候要知道编码是什么。怎么办呢?这样做,不管它,首先以iso-8859-1编码转换过来,然后再用正则表达式看看网页头部,如:<meta content="text/html; charset=gb2312" http-equiv="Content-Type">,这时就知道这个网页的编码是gb2312,再利用这个式子String s2 = new String(s1.getBytes("ISO-8859-1"),"gb2312");s2就能正确显示网页内容。假如你用其他字符集如utf-8作为中间码,也能知道网页编码是gb2312,但这是你用式子String s2 = new String(s1.getBytes("utf-8"),"gb2312"),就会出现乱码现象,所以最好用iso-8859-1作为中间码。所以,楼主除了犯以上错误以外,还有,就不应该用US-ASCII作为中间码,否则,是不能转换为中文的,它们之间无法做到相互转换,只有iso-8859-1才能完美转换成其他编码。

原创粉丝点击