通过上传。我解析了excel后。其中一个单元格内容为中文。然后我通过文件/流方法存进sql server数据库,存入后的中文乱码了。 读取excel后,单元格的中文没有乱码,输入检查过。问题就在往数据库存的过程中。存入数据的部分代码是这样的,怎么修改呢?
u1 = new URL(dbserver1[k] + webURL);
con1 = u1.openConnection();
con1.setDoOutput(true);
OutputStream ops = con1.getOutputStream();
ops.write(para.getBytes());
ops.close();
// System.out.println("===="+u1+"---"+para);
int c1 = 0;
sb = new StringBuffer();
reader = new InputStreamReader(con1.getInputStream(),"utf-8");
while ((c1 = reader.read()) != -1) {
sb.append((char) c1);
}
// 不同的同步地址返回的东西必须一样
results[k] = sb.toString();

解决方案 »

  1.   

    只要逻辑正确,这代码应该没有什么问题。
    乱码问题,往往是你编码集不统一所造成的。
    比如,你JSP的页面,建议使用如下
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    以及头元素:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />还有你ECLIPSE中也将项目及文件都设置为UTF-8.
      

  2.   

    SqlServer 支持中文,这样的问题 一般就是 页面编码,和页面数据传输中的编码不同一拉
      

  3.   

    是的,入库前我输出看了。没有乱码。sql server数据库啊。
      

  4.   

    再搞个过滤器:
    doFilter中加入如下代码:String encode="UTF-8";
    request.setCharacterEncoding(encode);
    response.setContentType("text/html; charset="+encode);
    chain.doFilter(request, response);
      

  5.   

    过滤器也有的,不是上传时页面跳转问题吧。是之后存入sql server数据库时乱码了。
      

  6.   

    将数据库中的字段类型修改为unicode类型 比如: 
    varchar     --> nvarchar 
    char           --> nchar 
    text           --> ntext
      

  7.   

    con1.setDoOutput(true);
    OutputStream ops = con1.getOutputStream();
    ops.write(para.getBytes("utf-8"));
    ops.close();
    // System.out.println("===="+u1+"---"+para);
    int c1 = 0;
    sb = new StringBuffer();
    reader = new InputStreamReader(con1.getInputStream(),"utf-8");
    while ((c1 = reader.read()) != -1) {
    sb.append((char) c1);
    }
    // 不同的同步地址返回的东西必须一样
    results[k] = sb.toString();
    这里我打印出results[k] 的值。它乱码了。值为<?xml version="1.0" encoding="GBK"?><root><code>1</code><desc>?????</desc></root>
      

  8.   

    <?xml version="1.0" encoding="GBK"?><root><code>1</code><desc>?????</desc></root>
    XML也要设置为UTF-8啊。别搞GBK
      

  9.   

    XML的值是我得到的。用那个方法得到的。我自己设置不了吧
      

  10.   

    这里我打印出results[k] 的值。它乱码了。值为<?xml version="1.0" encoding="GBK"?><root><code>1</code><desc>?????</desc></root>============
    不是说由你打印的吗?那GBK是哪设置的,找到根源,进行相应修改。
      

  11.   

    <?xml version="1.0" encoding="GBK"?><root><code>1</code><desc>?????</desc></root>
    ========
    这GBK从哪来的,找不到?怎么可能!
      

  12.   

    //用流的方式把vo值对象存进了数据库
    addResult = PolicyDBServer.addPolicyData( vo.toURLPara() );
    System.out.println(addResult);<?xml version="1.0" encoding="GBK"?><root><code>1</code><desc>?????</desc></root>
    就是输出的addResult的值。
    我代码都放出来,谁有时间帮忙看看啊。
    vo.toURLPara() 方法:
    @SuppressWarnings("deprecation")
    public String[] toURLPara(){
    if (this==null)
     return null;
    Class cla=this.getClass(); 
    Field[] f = cla.getDeclaredFields();
    if ((f==null)||(f.length<=0))
    return null;
    String[] paras = new String[f.length];
    //String result = "";
    String fieldName = "";
    Method meth;
    for (int i = 0; i < f.length; i++){
    fieldName= "get" + f[i].getName().substring(0,1).toUpperCase()+f
      

  13.   

    addPolicyData方法:
    public static String addPolicyData(String[] paras) throws Exception{
    if ((paras==null)||(paras.length<=0))
    return "参数错误";
    String url = "/policy/add";
    String result = getData(url, paras);
    return result;
    }
      

  14.   

    getData方法
    protected static String getData(String webURL, String[] paras) {

    Properties p = null;
    StringBuffer sb = null;
    InputStreamReader reader = null;
    String result = ""; URLConnection con1 = null;
    URL u1 = null;
    if (dbserver1 == null || dbserver2 == null || dbserver3 == null) {
    p = getServerAddr();
    dbserver1 = p.getProperty("dbserver.addr", "0").split(",");
    dbserver2 = p.getProperty("dbserver.username", "0").split