当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 我在h文件里面已经声明过该函数了,也将这些文件放在一个目录下面了,并且这个函数自己编译是是通过的。为什么在其他c文件里面调用这个函数就会编译不通过呢? 报错是: test.obj : error lnk2001: unresolved external symbol "int __cdecl ccvhist_judge(char *)" (?ccvhist_judge@......
    摘要: 项目中遇到需读取网络中某一机子注册表值(已开启remote registry服务,并已经通过net use命令连接上该机),想问一下有没有高手知道这样的api???,最好有说明! 应该有这样的api吧,我看regedit就可以操作远程注册表,在满足我上面说的条件下!! ps:如果问题证实可行,可再加分100! ......


用SmartUpload上传中文名称的文件,保存进数据库是乱码

上传后,把中文名称保存进数据库,数据库中显示问号,在插入数据库之前,把中文名称打印出来都是正确的。

NO.1   作者: wzy19514

在中文名称保存进数据库的页面加  
  request.setCharacterEncoding("gb2312");

NO.2   作者: onlyxu

设定数据库默认字符集为gb2312

NO.3   作者: blackdreamzg

你用的是linux?

NO.4   作者: Goal3

是不是数据库不支持,   或者附件名称是二级字库?

NO.5   作者: chaozi

是这个SmartUpload上传组件的问题,楼主可以到网上找一下,有一个解决的方法是修改这个组件中的一个类。  
  我的邮件是:zchaozi@126.com。我可以把这个资料发给你。

NO.6   作者: geelpheels

也发给我一份谢谢geelpheels@sina.com

NO.7   作者: dvictor

jspSmartUpload虽然能下载文件,但对中文支持不足。若下载的文件名中有汉字,则浏览器在提示另存的文件名时,显示的是一堆乱码,很扫人兴。上面的例子就是这样。    
   
  为了给jspSmartUpload组件增加下载中文文件的支持,我对该组件进行了研究,发现对返回给浏览器的另存文件名进行UTF-8编码后,浏览器便能正确显示中文名字了。这是一个令人高兴的发现。于是我对jspSmartUpload组件的SmartUpload类做了升级处理,增加了toUtf8String这个方法,改动部分源码如下:    
   
  public   void   downloadFile(String   s,   String   s1,   String   s2,   int   i)  
  throws   ServletException,   IOException,   SmartUploadException  
          {  
  if(s   ==   null)  
          throw   new   IllegalArgumentException("File   "   +   s   +  
          "   not   found   (1040).");  
  if(s.equals(""))  
          throw   new   IllegalArgumentException("File   "   +   s   +  
          "   not   found   (1040).");  
  if(!isVirtual(s)   &&   m_denyPhysicalPath)  
          throw   new   SecurityException("Physical   path   is  
          denied   (1035).");  
  if(isVirtual(s))  
          s   =   m_application.getRealPath(s);  
  java.io.File   file   =   new   java.io.File(s);  
  FileInputStream   fileinputstream   =   new   FileInputStream(file);  
  long   l   =   file.length();  
  boolean   flag   =   false;  
  int   k   =   0;  
  byte   abyte0[]   =   new   byte[i];  
  if(s1   ==   null)  
          m_response.setContentType("application/x-msdownload");  
  else  
  if(s1.length()   ==   0)  
          m_response.setContentType("application/x-msdownload");  
  else  
          m_response.setContentType(s1);  
  m_response.setContentLength((int)l);  
  m_contentDisposition   =   m_contentDisposition   !=   null   ?  
  m_contentDisposition   :   "attachment;";  
  if(s2   ==   null)  
          m_response.setHeader("Content-Disposition",    
          m_contentDisposition   +   "   filename="   +    
          toUtf8String(getFileName(s)));  
  else  
  if(s2.length()   ==   0)  
          m_response.setHeader("Content-Disposition",    
          m_contentDisposition);  
  else  
          m_response.setHeader("Content-Disposition",    
          m_contentDisposition   +   "   filename="   +   toUtf8String(s2));  
  while((long)k   <   l)  
  {  
          int   j   =   fileinputstream.read(abyte0,   0,   i);  
          k   +=   j;  
          m_response.getOutputStream().write(abyte0,   0,   j);  
  }  
  fileinputstream.close();  
          }  
   
          /**  
            *   将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.  
            *   纵横软件制作中心雨亦奇2003.08.01  
            *   @param   s   原文件名  
            *   @return   重新编码后的文件名  
            */  
          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();  
          }  
     
   
   
  注意源码中粗体部分,原jspSmartUpload组件对返回的文件未作任何处理,现在做了编码的转换工作,将文件名转换为UTF-8形式的编码形式。UTF-8编码对英文未作任何处理,对中文则需要转换为%XX的形式。toUtf8String方法中,直接利用Java语言提供的编码转换方法获得汉字字符的UTF-8编码,之后将其转换为%XX的形式。    
   
  将源码编译后打包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目录下,然后重启Tomcat服务器就可以正常下载含有中文名字的文件了。另,toUtf8String方法也可用于转换含有中文的超级链接,以保证链接的有效,因为有的WEB服务器不支持中文链接。    
 

NO.8   作者: chaozi

给你发了,顺便发了个反编译器,这样你就可以重新编译了。

NO.9   作者: yuling1222

很简单的直接用新建一个SmartUpload     request对象获取就可以了,SmartUpload自己会提供中文的转换,不需要在做任何其他操作,呵呵!

NO.10   作者: rolandy

改类是给自己找麻烦,  
  其实用request.setCharacterEncoding("gb2312");肯定可以完成,我一直都是这样用的.  
  而且这行代码最好放在你的过滤器中完成,一劳永逸!

NO.11   作者: thefishwilldie

newFileName=new   String(myFile.getFileName().getBytes(),"GBK")  
  转码试试。

NO.12   作者: bigdog001

“我就是指直接用request对象获取上传文件的文件名称啊,获取了后,打印出来,中文显示都是正确的,但是吧这个名称存进数据库,就是问号了。数据库里面都显示问号,”  
   
   
  这样看来是数据库写入操作的问题,你的数据库?如果是mysql:  
  jdbc:mysql://127.0.0.1/yourdb?useUnicode=true&characterEncoding=GBK  
   
  顺便应该验证一下,其他应用存中文有问题吗?  
 


 ·这样在程序里捕获这种错误    »显示摘要«
    摘要: 程序常常会被系统悄无声息地关掉,我已经把所有有可能出错的代码都包含在 try{}catch(...){} 里面了,可是仍然停不下来,我该怎么办?急啊 ///程序编译没有任何警告,基本排除指针越界操作的问题。我跟踪了一下程序,发现出错的时候,堆栈里有一大片被一些我没有定义过的字符覆盖了,包括保存函数返回地址的地方。 程序在 dev-c++4.9.9.0下编译。 里面用到了完成端口模型,而且我......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE