输出抄excel:
response.setHeader("Content-disposition","attachment;filename*=utf-8'zh_cn'"
+URLEncoder.encode('文件名袭',"UTF-8")+".xls");//设定输出文件头
response.setContentType("application/ms-excel");//定义输出类型
2. 通过java控制linux环境下解压文件夹后中文文件名是乱码
将linux当前环境设置为中文环境即可。
修改/etc/sysconfig/i18n 文件
LANG="zh_CN.GB2312"
3. 在linux下编辑的的java文件在window下显示乱码乱码
linux一般用UTF8编码的。WINDOWS是用gbk的。所以有汉字的时候会乱码,没汉字的时候换行也会出问题。你可以用一些高级点的文本编辑器或者使用IDE,比如说你用JCreator打开就可以了。
补充:你用什么IDE的滑游?如果你直接从命令行编译的,可以帆耐通过态让春javac的参数来指定字符集,即javac -encoding utf8 文件名。
4. java程序读取properties配置文件出现中文乱码
你的properties文件编译过了吗?凡是有非西欧的字符都应该事先编译的,具体方法如下:
比如你有一个1.properties文件(含有非西欧字符),你可以在cmd窗口中切换到1.properties文件所在目录,然后输入native2ascii -reverse -encoding gb2312 1.properties ActionName_zh_CN.properties
1.properties为转换之前的文件名 ActionName_zh_CN.properties为转换之后的文件名,其中-encoding后面的gb2312是可以变的如 utf-8等
5. java打开excel乱码
HSSFWorkbook workbook = new HSSFWorkbook();//创建EXCEL文件
HSSFSheet sheet= workbook.createSheet(sheetName); //创建工作表
这样在用英文名作为工作表名是没问题的,但如果sheetName是中文字符,就会出现乱码,解决的方法如下代码:
HSSFSheet sheet= workbook.createSheet();
workbook.setSheetName(0, sheetName,(short)1); //这里(short)1是解决中文乱码的关键;而第一个参数是工作表的索引号。
没有太多原因,POI就是如此;再说导出的EXCEL文件名的中文乱码问题, 导出时代码如下:
.....
this.getResponse().reset();
this.getResponse().setContentType("application/msexcel");
this.getResponse().setHeader("Content-Disposition", "inline;filename=中文名.xls");
try {
em.getExcelMutliIO(this.getResponse().getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这个时候导出去时,文件名会为乱码,解决的办法如下,在你的代码增加下列函数:
public static String toUtf8String (String s){
StringBuffer sb = new StringBuffer();
for (int i=0;i<s.length();i++){
char c = s.charAt(i);
if (c >= 0 && c <= 255){sb.append(c);}
else{
byte[] b;
try { b = Character.toString(c).getBytes("utf-8");}
catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0) k += 256;
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
然后在导出时,对文件名引用该函数,代码如下:
this.getResponse().setHeader("Content-Disposition", "inline;filename=" +toUtf8String("中文文件名.xls"));
6. java在linux下遍历文件夹,文件名中文乱码的问题
Java 中的字符编码默认是Unicode
用new String(files[i].getName().getBytes("UTF-8"),"UTF-8");试下看
7. java https请求 中文乱码问题
尝试的方法:
1. 在服务端接收到参数时,utf-8转gbk,无效。
2. 在服务端接收到参数时,iso-8859-1转gbk,无效。
3. 在发送请求前将中文参数转码,utf-8转iso-8859-1,无效。代码如下:
new String(remark.getBytes(“UTF-8”), “ISO-8859-1”)
4. 在请求端,HttpHeader设定ContentType为“application/json;UTF-8”,无效。代码如下:
headers.setContentType(Media.valueOf(“application/json;UTF-8”));
写到这里,有人应该感觉到这有点“病急乱投医”的感觉了,没有头绪地在试着各种方式。是的,起初我觉得是请求header中采用了ISO-8859-1的编码,但尝试后很显然不是;后来我觉着是否是RestTemplate中采用的HttpMessageConverter方式所决定的,但没能找到很好的证明方式,查资料说的是StringHttpMessageConverter默认采用的是ISO-8859-1编码,可我觉得我指定了ContentType为application/json,RestTemplate不应该去调用StringHttpMessageConverter啊,其中的原理还有待深究。个人感觉这种情况出问题的可能性最大。
最后,在网上看到一篇文章后,看了一种建议方式,并且是可行的,就是使用URLEncode,将中文参数在传参前进行encode.这里以GBK编码是为了在服务器端接收参数后无需再转码了,如下:
list.add(URLEncode.encode(name, “GBK”));
URLEncode方式可以解决这种特定场景的中文乱码问题,相信理解其原理后还可以运用到更多的场景。目前我在网上看到的,关于用URLEncode处理中文乱码最多的场景就是文件下载时中文文件名乱码。