星期一, 一月 01, 2007

开篇2007

新的一年,将BLOG迁至此处。

星期三, 十二月 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

浮出地面

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