zoukankan      html  css  js  c++  java
  • jsp 打开中文文件名的word 文档

    我"a.jsp?param=中文"传递参数,另一个页面request.getParameter(param);接收此参数,我把Tomcat目录conf目录server.xml中加入一条URIEncoding="gb2312"
    这个接收到的参数就不会出现乱码了!
    可是我页面中又要打开中文pdf文件的链接,如点击“学习.pdf”文件便打开此pdf文档,此时页面报错如下:
    HTTP Status 404 - /Data/%E9%A3%9E%E8%A1%8C%E6%89%8B%E5%86%8C/%E9%A3%9E%E8%A1%8C.pdf

    --------------------------------------------------------------------------------

    type Status report

    message /Data/%E9%A3%9E%E8%A1%8C%E6%89%8B%E5%86%8C/%E9%A3%9E%E8%A1%8C.pdf

    description The requested resource (/Data/%E9%A3%9E%E8%A1%8C%E6%89%8B%E5%86%8C/%E9%A3%9E%E8%A1%8C.pdf) is not available.


    --------------------------------------------------------------------------------
    我在网上查过相关资料,几乎所有的WEB容器在其内部默认的字符编码格式都是以ISO-8859-1为默认值的,同时,几乎所有的浏览器在传递参数时都是默认以UTF-8的方式来传递参数的,我链接中文pdf文件,IE是用UTF-8传递参数的,所以我又要把
    Tomcat目录conf目录server.xml URIEncoding="gb2312"改为 URIEncoding="UTF-8"这样中文链接问题便解决了!
    可是这样a.jsp?param=中文"传递参数,request.getParameter(param)又变成乱码了,怎样才能把这两个问题同时给解决了!请高手指点,在线等!我的页面已加过:
    <%@ page contentType="text/html; charset=gb2312" errorPage="error.jsp"%>
    <%@page pageEncoding="GB2312"%>
    <%request.setCharacterEncoding("GB2312");%>这三句话了!



    所有的与编码有关的改用UTF-8,试试



    <%@ page contentType="text/html; charset=utf-8" errorPage="error.jsp"%>
    <%@page pageEncoding="utf-8"%>
    <%request.setCharacterEncoding("utf-8");%>



    是不是没写request.setCharacterEncoding("gb2312")啊,我以前遇到过这种问题



    zxm_dgcstars大哥:
    改为UTF-8后,出现了两个问题:
    1)我页面刷新后,点中文两个字,a.jsp?param=中文"传递参数,另一个页面request.getParameter(param);
    后是&#65533;&#65533;&#65533;&#65533;&#65533;&#1458;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#1458;&#65533; (乱码),可是当我再点中文两个字后,另一个页面就不是乱码,为什么第一次是乱码,再次点击后就不是乱码了呢?
    2)改为UTF-8后,我的页面原来定义的CSS都发生了变化,比如中文两个字原来下面没有下划线,改为UTF-8后,下面就有下划线了,我的CSS就不起作用了!请问CSS和编码有关吗?怎样调整呢?我的CSS定义如下:
    body, table {
    background-color: #CCFFFF;FONT-SIZE: 9pt; WORD-SPACING: 2pt; COLOR: #333333; FONT-FAMILY: "宋幻"; LETTER-SPACING: 0.5pt
    }
    A:link {
    COLOR: #000000; FONT-STYLE: normal; TEXT-DECORATION: none
    }
    A:visited {
    COLOR: #000000; FONT-STYLE: normal; TEXT-DECORATION: none
    }
    A:hover {
    COLOR: #f77d08; FONT-STYLE: normal; TEXT-DECORATION: none
    }
    A:active {
    COLOR: #0066cc; FONT-STYLE: normal; TEXT-DECORATION: none
    }
    .en {
    FONT-SIZE: 12px; FONT-FAMILY: "Arial", "Helvetica", "sans-serif"
    }
    BODY {
    SCROLLBAR-FACE-COLOR: #eeeeee; FONT-SIZE: 9pt; SCROLLBAR-HIGHLIGHT-COLOR: #b5b5b5; SCROLLBAR-SHADOW-COLOR: #b5b5b5; COLOR: #000000; SCROLLBAR-3DLIGHT-COLOR: #eeeeee; LINE-HEIGHT: 12pt; SCROLLBAR-ARROW-COLOR: #b5b5b5; FONT-FAMILY: "宋体"; SCROLLBAR-DARKSHADOW-COLOR: #eeeeee
    }
    .3dfont {
    FILTER: glow(color=ffffff,strength=0) shadow(color=aaaaaa,direction:75); POSITION: relative; WIDTH: 100%




    jiaozi226() :
    我每个页面都写了:
    <%@ page contentType="text/html; charset=gb2312" errorPage="error.jsp"%>
    <%@page pageEncoding="GB2312"%>
    <%request.setCharacterEncoding("GB2312");%>这三句话了!
    我一个是传递中文参数,一个是打开中文文件名的链接,比如页面点击“学习.pdf”或“学习.word”就把pdf或word文档给打开了,我点击英文名的pdf或word是可以打开的!比如love.pdf或love.word,矛盾中,每次只能解决一个问题,两个问题不能同时解决!



    你用的eclipse?可以试试直接吧模板文件改成中文,以后创建的时候应该就自动识别中文了。



    直接把模板文件改成中文?具体操作说下,好吗?我用的eclipse3.2,myeclipse5.0



    在窗口-首选项,里面选择wdb和xml,下面有个jsp,里面可以选择编码为中文



    在里设置两个属性 charset = "gb2312" encoding = "gb2312"



    cucaracha(巴蒂斯图塔) :
    你说的啥意思?
    我每个页面都写了:
    <%@ page contentType="text/html; charset=gb2312" errorPage="error.jsp"%>
    <%@page pageEncoding="GB2312"%>
    <%request.setCharacterEncoding("GB2312");%>
    你让我里设置两个属性 charset = "gb2312" encoding = "gb2312"??
    难道写成:
    <%@ page contentType="text/html; charset=gb2312"
    encoding = "gb2312" errorPage="error.jsp"%>
    是这个意思吗?



    believebase() :
    首选项里我根本找不到wdb和xml,在哪里啊?



    在你的中文参数传之前先用下面代码进行编码:
    String param1=URLEncoder.encode("你的中文参数","UTF-8")
    然后在a.jsp?param=param1(前面转码后的参数);
    在取参数的时候用下面代码取得参数:
    String param1=URLDecoder.decode("传递过来的编码后的参数","UTF-8");//在变成中文!



    Sunny319(努力学习java中.) :
    用这句话要导什么包吗?报URLEncoder的错!前面要加什么东西吧!
    String param1=URLEncoder.encode("你的中文参数","UTF-8")//我把这句话写我页面上,就报
    URLEncoder cannot be resolved.
    我页面上的相关代码:
    String param1=URLEncoder.encode("filenames[n]","UTF-8");
    我js:
    onClick="notinpropertiesturnit('<%=param1%>',Content<%=n%>,Img<%=n%>,tag<%=n%>);"

    function notinpropertiesturnit(manualName,ss,ii,bb){
    self.parent.frames["mainFrame"].location.href="notinpropertiestr.jsp?manualName="+manualName;
    }
    我另一个页面该怎样写啊?我原来取参数的页面代码:
    String a=request.getParameter("manualName");
    改成这样吗?
    String a=URLDecoder.decode("manualName","UTF-8");//URLDecoder cannot be cannot be resolved ,也要加什么东西吧!



    页面加这个
    <%request.setCharacterEncoding("utf-8");%>
    XML的不变



    import java.net.URLEncoder;
    import java.net.URLDecoder;
    改成:
    String a=request.getParameter("manualName");
    a=URLDecoder.decode(a,"UTF-8");



    你的中文参数编码后,在地址栏的连接时应该是:a.jsp?param=%AB%BC这种格式!



    zhangfan790913(笑月) :
    XML不变是说server.xml文件不变吗?我原来server.xml加 URIEncoding="UTF-8"这句话的,你不让加这句话了?我页面上写这两句话对吧:
    <%@page contentType="text/html; charset=gb2312"%>
    <%request.setCharacterEncoding("utf-8");%>
    我server.xml文件没加那句话了,而且页面也用<%request.setCharacterEncoding("utf-8");%>
    了,现在两个问题一个没解决!我原来还解决一个问题的!现在链接打开中文是乱码,传中文参数也是乱码,你的方法根本不行!
    我要链接打我页面上的文档.doc 文件,鼠标打击后:乱码!!
    HTTP Status 404 - /Data/EEE/%E6%96%87%E6%A1%A3.doc

    --------------------------------------------------------------------------------

    type Status report

    message /Data/EEE/%E6%96%87%E6%A1%A3.doc

    description The requested resource (/Data/EEE/%E6%96%87%E6%A1%A3.doc) is not available.
    传中文参数也是乱码:
    ???????á ?é??ê??á
    烦恼啊!到底怎么解决啊!



    %E6%96%87%E6%A1%A3.doc这个不是乱码啊.就是中文用一种编码格式编码而已!你可以把它还原成中文!



    Sunny319(努力学习java中.) :
    你说你方法前,我server.xml的这句话也是要加的吧:



    server.xml中加URIEncoding="UTF-8"//只加这句话可以解决页面链接打开中文文件名问题:
    比如我要链接打我页面上的文档.doc 文件,加了这句话就可以打开了这个word文档了,但是页面传中文,另一个页面接收此中文,另一个页面上接收的是乱码??????? ???????

    我按你的方法还是乱码啊!我地址栏没显示的!因为我是多窗口的,一个大的jsp分了三个小的jsp,我传参数是从一个小的jsp传到另一个小的jsp。
    你有msn吗?我把文件发给你,我msn:
    mengnansoftware@hotmail.com



    Sunny319(努力学习java中.) :
    %E6%96%87%E6%A1%A3.doc是一种编码格式,那怎样还原成中文???说下具体办法!我都急死了!server.xml要改吗?



    jsp1.jsp?name="楼主" 提交到jsp2.jsp


    jsp2中

    String str = request.getParemeter("name");
    String param= new String(str.getBytes("ISO-8859-1"), "GBK");



    dr_lou() :
    请问server.xml还要改吗?
    我把server.xml加了URIEncoding="UTF-8"这句话后,用你的方法还是乱码!
    String a=request.getParameter("manualName");

    String param= new String(a.getBytes("ISO-8859-1"), "gb2312");


    out.println(param);
    页面上还是乱码!???????



    dr_lou() :
    我已经说了好几遍了,矛盾中,你这个方法只能解决传中文参数的问题,链接打开中文名字的文件不行,我要链接打我页面上的文档.doc 文件,鼠标打击后:报错如下:
    HTTP Status 404 - /Data/EEE/%E6%96%87%E6%A1%A3.doc

    --------------------------------------------------------------------------------

    type Status report

    message /Data/EEE/%E6%96%87%E6%A1%A3.doc

    description The requested resource (/Data/EEE/%E6%96%87%E6%A1%A3.doc) is not available.
    server.xml加了URIEncoding="UTF-8"后可以解决打开中文文件链接的问题,但是不能解决传中文参数的问题,不加URIEncoding="UTF-8",加
    String a=request.getParameter("manualName");

    String param= new String(a.getBytes("ISO-8859-1"), "gb2312");


    out.println(param);
    可以解决传中文参数的问题,但是不能解决打开中文文件链接的问题!
    要想使这两个问题同时给解决了该如何办??求大家了!!郁闷啊!



    在Servlet里接值
    String book_pdf_name = new String(request.getParameter("book_pdf").getBytes("ISO-8859-1"),"gb2312");

    在Jsp页面里接值
    把getBytes("ISO-8859-1")改成getBytes()就行了。



    ran_ran():
    你说的是啥意思啊?我写的是jsp+javabean的程序啊!你说的是解决我那两个矛盾的问题中的哪一个啊?我的要求是传中文参数和页面打开中文文件链接这两个问题都可以解决,不是解决其中一个啊!那么多人说的方法,都只解决了其中一个问题,另一个问题根本没解决!



    那是我没看清``

    我最近作了一个新闻发布系统

    就涉及 叶面之间传递中文 和 页面打开中文文件链接

    我QQ 397692925 我把它发给你

    中文连接那个 好像只在<%@ page 里加了东西 没修改xml



    dr_lou() :
    发我邮箱里好吗?mengnansoftware@hotmail.com,我现在在msn上呢!我白天上不了qq,晚上才能上的,我qq:565355525
    还有zxm_dgcstars() 的方法,第一次点击中文文件链接,传过去的是乱码,我第二次点击此中文文件链接传过去就不是乱码了,也不知道怎么回事,而且我原来定义的css中链接下面原来没横线的,用了zxm_dgcstars() 的方法的方法下面就有横线了!搞不懂!他人也不回我帖子了!
    他的方法是改xml,然后页面中加:
    <%@ page contentType="text/html; charset=utf-8" errorPage="error.jsp"%>
    <%@page pageEncoding="utf-8"%>
    <%request.setCharacterEncoding("utf-8");%>



    关注中



    别用gbk,所有的地方最好都用utf-8或iso8859-1



    刚测试完

    jsp1.jsp
    <%@ page contentType="text/html; charset=GBK" %>

    <head>

    </head>
    <body bgcolor="#ffffff">
    <form action="jsp2.jsp?name=徐" method="POST">
    <input type="file" name="filename" />

    <input type="submit" />
    </form>
    </body>



    jsp2.jsp
    <%@ page contentType="text/html; charset=GBK" %>

    <head>

    </head>
    <%
    request.setCharacterEncoding("GBK");
    String str1 = request.getParameter("name");
    String str2 = request.getParameter("filename");
    String gbk1 = new String(str1.getBytes("ISO-8859-1"),"GBK");
    %>
    <body bgcolor="#ffffff">
    " target="_blank"><%=gbk1 %>
    </body>



    可以打开有中文的超连接



    dr_lou() :
    你说的和我的需求不符合!我是在一个页面做链接,另一个页面接参数,你的是在同一个页面又做链接又接参数!



    到底有没有人知道怎么解决啊!郁闷啊!
    Sunny319(努力学习java中.) :
    %E6%96%87%E6%A1%A3.doc是一种编码格式,那怎样还原成中文???说下具体办法!等你回帖呢!



    我的server配置文件如下
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true"/>

    我的web项目名为StrutsTest

    写了一个测试action ,并且在strutsTest下放入一个文件 叫"中文.txt"

    System.out.println("test");
    String tst=req.getParameter("chinese");
    System.out.println(tst);
    try {
    System.out.println(new String(tst.getBytes("ISO-8859-1"),"GB2312"));
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return mapping.findForward("page");

    测试1
    http://127.0.0.1:8080/StrutsTest/search.do?chinese=中文1111111111

    console打印如下
    test
    ????1111111111
    中文1111111111

    测试2
    http://127.0.0.1:8080/StrutsTest/中文.txt
    显示内容正常

    关键在于useBodyEncodingForURI="true"

    各位上面的兄弟不好意思了 独接50分 承让承让



    syoumei(好的老师让你上天堂不好的老师让你住套房!) :
    我加这两条URIEncoding="UTF-8" useBodyEncodingForURI="true" 还是只能解决链接打开中文文件的问题啊,那个传中文的还是乱码啊!!useBodyEncodingForURI="true"这句话是啥意思?
    你的console打印如下
    test
    ????1111111111
    中文1111111111
    这里面不是也有????吗
    我msn:mengnansoftware@hotmail.com
    qq:565355525



    System.out.println("test");//test
    String tst=req.getParameter("chinese");//????111111
    System.out.println(new String(tst.getBytes("ISO-8859-1"),"GB2312"));//中文1111111111



    <%@ page contentType="text/html;charset=gb2312"%>
    <%=new String(request.getParameter("chinese").getBytes("ISO-8859-1"),"GB2312")%>
    直接用在jsp页面也没问题啊



    我的页面还是乱码啊,你有msn或qq吗?我加你,我把我jsp页面代码发给你!



    出乱码页加上<%request.setCharacterEncoding("GB2312");%>



    其实不用管什么乱码的,只用一个GB312就可以了...至于出现乱码就与你的JSP代码出错了吧...



    icannotfly() :
    你根本不看我帖子的内容,你自己好好看看吧!你那句话早加了!



    up



    又是乱码问题啊,没猜错的话,你是在做一个类似新闻发布的系统。

    那些连接是从数据库中取出来的,然后在第一个页面显示正常,在第二个也面就显示乱码,包括传到第二个页面的地址栏都是正常的,呵呵,我以前就是出现这种问题。

    CSDN中并不是你想像的那样,高手如云!一般人也都是互相COPY,给的答案也是解决不了什么的。

    还是自己看下书,我记得我以前散了100分,很多人回答,最终也没有解决这个问题。

    还是自己解决了,变换一种方法。

    楼上的有一位说的可能对,利用URLEncoder和URLDecoder,不过我当时用的时候也是说找不到类,实际上已经导入了。

    另:这个方法是我从网上查的,专门针对参数有中文传递的,而且还要在你说的那里加上URIEncoding="utf8"

    我看书,查资料弄了很长时间。
    建议:不管是数据库还是页面,统一用UTF8编码。

  • 相关阅读:
    day16(链表中倒数第k个结点)
    day15(C++格式化输出数字)
    day14(调整数组顺序使奇数位于偶数前面 )
    day13(数值的整数次)
    day12(二进制中1的个数)
    day11(矩形覆盖)
    day10(跳台阶)
    hadoop 又一次环境搭建
    Hive 学习
    hadoop -工具合集
  • 原文地址:https://www.cnblogs.com/cy163/p/1299217.html
Copyright © 2011-2022 走看看