星期三, 十二月 20, 2006

下载文件的中文文件名问题


为何需要自己写下载程序,基本上都是出于安全考虑,而不是基于性能考虑,这里就不详细描述了,只写下在其中遇到的中文文件名问题。


网上有很多这方面资料,基本上都沾边,又不完整。


目前发现主要问题就是IE识别的是utf8编码,而firefox之类的浏览器识别的是ISO8859-1编码。还有一个就是空格的处理,不同浏览器是不一样处理的。另外据说老版本IE有150个字符的问题,经测试在IE6或更高版本中,已经可以自动截断了,这里就不再写处理办法了,其实如果需要处理就是把文件名自己截短即可。


String agentName = request.getHeader("user-agent");
boolean agentBeIE = (agentName!=null && agentName.indexOf("MSIE")>=0);


if (agentBeIE) {
encoding = "UTF-8";
attachFilename = java.net.URLEncoder.encode(saveas_filename, encoding);
attachFilename = attachFilename.replaceAll("\\+", "%20");
}
else {
encoding = "ISO8859_1";
attachFilename = new String(saveas_filename.getBytes("UTF-8"),encoding);
}


response.reset();
response.setCharacterEncoding(encoding);//似乎不起作用
response.setHeader("Content-Type",file_contenttype + ";charset=" + encoding);
response.setHeader("Content-Disposition",(isOnLine?"inline; ":"attachment; ")+"filename=\"" +attachFilename +"\"");
response.setHeader("Cache-Control", "no-cache,must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setContentLength((int) filesize);


ServletOutputStream sout = response.getOutputStream();
byte[] buf = new byte[0x40000]; //256K=2^18=4*2^16
int nNumber=0;
long nTotalRead=0;
while ((nNumber = is.read(buf)) != -1)
{
sout.write(buf, 0, nNumber);
nTotalRead += nNumber;
}
sout.flush(); //输入完毕,清除缓冲
sout.close(); //关闭输出
response.flushBuffer();


星期五, 十一月 24, 2006

中文问题(UTF8:ajax,jsp,java,mysql)

以UTF8编码测试一切顺利。按照前面那篇文章的设置即可,将GBK部分改为UTF8即可。


唯一遇到比较麻烦的是,原来用GBK编码写的jsp代码中的中文,全部变为乱码,需要找一个合适的工具将全部的源码编码修改一遍。


需要补充一点:关于配置文件中default-character-set的设置,还有一个client设置。


[mysql]

default-character-set=gbk


[client]

default-character-set=gbk


[mysqld]

default-character-set=gbk


测试了中文、日文、法文、俄文、阿文等字符的测试,一切顺利。

中文问题(UTF8:ajax,jsp,java,mysql)

以UTF8编码测试一切顺利。按照前面那篇文章的设置即可,将GBK部分改为UTF8即可。


唯一遇到比较麻烦的是,原来用GBK编码写的jsp代码中的中文,全部变为乱码,需要找一个合适的工具将全部的源码编码修改一遍。


需要补充一点:关于配置文件中default-character-set的设置,还有一个client设置。


[mysql]

default-character-set=gbk


[client]

default-character-set=gbk


[mysqld]

default-character-set=gbk


测试了中文、日文、法文、俄文、阿文等字符的测试,一切顺利。

中文问题(GBK:ajax,jsp,java,mysql)

2周一开始折腾中文问题,也算是老同志遇上老问题了,今天总算搞定了GBK相关的设置,明天再看看纯UTF8存储和交互的设置,一并测试中英西法葡俄阿日等多语种共同存储的相关问题。


提交ajax中文数据,基本可以这么解决:(POST数据时,注意UTF8问题)



var oXmlHttp = zXmlHttp.createRequest();


oXmlHttp.open("post", oForm.action, true);


oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;; charset=UTF-8");


oXmlHttp.send(sBody);



后台回复前端ajax中文时,参照如下代码:


response.setHeader("Content-Type", "text/html;charset=GBK");


PrintWriter out = response.getWriter();


out.print("回复数据:这是中文,welcome");




下面再说mysql中文问题,使用的是mysql5.0, tomcat5.0:


(1)数据库缺省字符集


修改/etc/my.cnf文件.改成如下内容:


[mysqld]


default-character-set=gbk


(2)数据库中文


CREATE DATABASE dbname DEFAULT CHARACTER SET GBK;


SET NAMES GBK;


SET CHARACTER SET GBK;


(3)JDBC连接


DbDriver = com.mysql.jdbc.Driver


DbUrl = jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=gbk


(4)导入中文数据


mysql --default-character-set=gb2312 dbname < backupdbfile.mysql


测试了以"镕"为代表的GBK字符,mysql存储和jsp显示均没有问题。



提醒:在用户可以看到的jsp页面中,使用的是GBK编码。

星期三, 十一月 22, 2006

中文问题(GBK:ajax,jsp,java,mysql)


周一开始折腾中文问题,也算是老同志遇上老问题了,今天总算搞定了GBK相关的设置,明天再看看纯UTF8存储和交互的设置,一并测试中英西法葡俄阿日等多语种共同存储的相关问题。


提交ajax中文数据,基本可以这么解决:(POST数据时,注意UTF8问题)



var oXmlHttp = zXmlHttp.createRequest();
oXmlHttp.open("post", oForm.action, true);
oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;; charset=UTF-8");
oXmlHttp.send(sBody);



后台回复前端ajax中文时,参照如下代码:


response.setHeader("Content-Type", "text/html;charset=GBK");
PrintWriter out = response.getWriter();
out.print("回复数据:这是中文,welcome");

下面再说mysql中文问题,使用的是mysql5.0, tomcat5.0:
(1)数据库缺省字符集
修改/etc/my.cnf文件.改成如下内容:
[mysqld]
default-character-set=gbk
(2)数据库中文
CREATE DATABASE dbname DEFAULT CHARACTER SET GBK;
SET NAMES GBK;
SET CHARACTER SET GBK;
(3)JDBC连接
DbDriver = com.mysql.jdbc.Driver
DbUrl = jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=gbk
(4)导入中文数据
mysql --default-character-set=gb2312 dbname < backupdbfile.mysql


测试了以"镕"为代表的GBK字符,mysql存储和jsp显示均没有问题。


提醒:在用户可以看到的jsp页面中,使用的是GBK编码。


星期五, 十一月 10, 2006

浮出地面

在领导的关怀下,偶们终于又搬家了,这次是从地下迁到了楼上。
新办公室采光极好,楼层也高,心情舒畅。
这里喝开水也很方便,就是有点特殊的气味。
不太好受的是,有阵阵的低频震动,还没摸清规律和频率。

星期五, 十月 20, 2006

中招了!病毒肆意修改IE的缺省地址

昨天电脑接近完蛋了,无穷无止的冒出病毒被拦截的信息,可诺顿又杀它不掉,IE的缺省主页地址也被修改了。诺顿报出的病毒名称包含:Downloader, Infostealer, Torjan等等。主页地址为www.piaoxue.com。

偶使用了诺顿,安全模式,升级病毒定义码,等手段无法搞定它。

后来,偶还请出了流氓软件鼻祖制作的"360安全卫士",倒是查到偶的机器上有流氓软件流氓插件,一一删除后,病毒却是依然如故。

再后来,偶baidu一下这个网站吧,果然搜到很多信息呀。搜索“飘雪病毒”至少可以找到150,000篇文章,而且据网友说还是近2天才冒出来的木马病毒,危害已经很深了,不少机器中招。

偶根据网上的方法,试了几次,没有任何效果。

最终,偶请出了法老级ghost软件,将机器打回2005年4月份的状态,终于把病毒赶走了,嘿嘿。

想想看,偶这几天一心向佛,慈悲为怀,没有干啥非法的勾当啊,都是符合八荣八耻要求的,也符合和谐社会要求的。偶无非就是在各大医疗网站上看看育儿知识,顶多在baidu上查一些知识。

流氓和病毒勾搭在一起的时候,偶目前实在是没啥好办法!只希望和谐社会将这些流氓整治一下,别让他们再为非作歹,祸害群众了。