package weibo4j.timeline;import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.*;import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.xml.internal.bind.marshaller.XMLWriter;
import weibo4j.timeline.test4;
/**
 * @author wsj
 */
public class Test7 {
public static void main(String[] args) throws Exception {
Document dom = DocumentHelper.createDocument();// 创建xml文件
dom.setXMLEncoding("UTF-8");
Map<Object, Integer> map = new HashMap<Object, Integer>();
Test4 ts =new test4();
map=ts.main1();
String xml = "<tags>" ;
for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
Object key = (Object) iter.next();
xml=xml+"<a href=\"\"  style=\"font-size: "+map.get(key)+"pt;\" color=\"0xff0099\">"+key+"</a> ";
}
xml=xml+"</tags>";
System.out.println(xml);
String s1 = new String(xml.getBytes(),"utf-8");
File f = new File("C:/Users/dodo/Desktop/3DTagCloudwithXML/tagcloud.xml");
PrintWriter pw = new PrintWriter(f);
pw.write(s1);
pw.close();

}
}

解决方案 »

  1.   

    个人认为:java的字符串编码。记住4点:
    1.输入时编码 new String(byte[] data, String encoding) 如:data 与 encoding是同一编码,字符串就不会乱码。一般情况下data与enconding缺省就是系统编码(gbk).其他String name = "谁"可以理解为 new String("谁".getBytes("gbk"), "gbk");
    2.java内存中的字符串一定是unicode.例如:在文本中有gbk编码"123",到java内容中就变成unicode"123"
      String a = "谁"; "谁"也是unicode存放。
    3.输出时编码。因为java内存中是unicode编码,所以只要unicode不乱码,得到byte[] data = String.getBytes(encoding),写到文件中就一定不会乱码,除非对应encoding是不支持中文的。
    4.在java中其他编码向unicode转换不乱码,unicode向其他编码转换也不乱码。其他编码之间转换一定乱码。
    对应的以上程序:
      xml是系统编码(gbk)得到。s1是先将xml由unicode-->gbk--->utf-8-->unicode.所以s1就是乱码,再用GBK保存到文件中就乱码。   
      如果想在文件中用utf-8保存。不需要将xml转换来转换去,只需要unicode-->utf-8就不会乱码。
      PrintWriter pw = new PrintWriter(f, "utf-8");
        pw.write(xml);
      或者FileOutputStream output = new FileOutputStream(f);output.write(xml.getBytes("utf-8"));
     
      

  2.   

    workspace 默认编码设为utf8 
      

  3.   

    // PrintWriter带有编码格式的构造方法有助于解决乱码问题
    PrintWriter pw = new PrintWriter(filePath, "utf-8");
    XMLWriter xmlWriter = new XMLWriter(pw);
    xmlWriter.write(document);
    xmlWriter.close();
      

  4.   

    map=ts.main1();
    是不是读到map里就乱码了?debug看下