通过上传。我解析了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();
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();
乱码问题,往往是你编码集不统一所造成的。
比如,你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.
doFilter中加入如下代码:String encode="UTF-8";
request.setCharacterEncoding(encode);
response.setContentType("text/html; charset="+encode);
chain.doFilter(request, response);
varchar --> nvarchar
char --> nchar
text --> ntext
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>
XML也要设置为UTF-8啊。别搞GBK
不是说由你打印的吗?那GBK是哪设置的,找到根源,进行相应修改。
========
这GBK从哪来的,找不到?怎么可能!
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
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;
}
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