欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
weblucene 更新備忘-實(shí)現類(lèi)似google 的多編碼支持


當初在設計WebLucene 的時(shí)候,為了能夠正確的截取請求中的中文q參數,在執行request.getParameter("q")之前先調用了request.setCharacterEncoding("gb2312")方法。這樣雖然避免了亂碼問(wèn)題的出現,但卻使得WebLucene 同時(shí)只能對一種編碼進(jìn)行處理,無(wú)法實(shí)現類(lèi)似于Google 的搜索效果,例如下面兩個(gè)鏈接:
http://www.google.com/search?ie=UTF-8&q=%E5%8C%97%E4%BA%AC
http://www.google.com/search?ie=gb2312&q=%B1%B1%BE%A9
查找的都是關(guān)鍵字為“北京”的內容,只是前者的 Url 是以UTF-8 方式進(jìn)行UrlEncode 得的,而后者則采用的是Gb2312。
在Google 上查找了很多關(guān)于setCharacterEncoding 和“多語(yǔ)言支持” 的文章,最后還是用最古老的方法解決了問(wèn)題,見(jiàn)下面一段代碼:
String ie = request.getParameter("encoding");
String q = new String(request.getParameter("q").getBytes("ISO-8859-1"), ie);
這樣,只要$q 是以$encodig 方式進(jìn)行提交/UrlEncode 的,那么我們就可以得到正確的q參數了——但有一點(diǎn)需要注意,就是要用 “ISO-8859-1” 的形式對字符串q 進(jìn)行g(shù)etBytes() 操作,而不能采用Utf-8的形式(至少我目前的試驗結果是這樣的)。

之所以不能用UTF-8 是因為一些應用服務(wù)器,如resin2.*,在試圖用UTF-8 編碼解析參數的時(shí)候,往往會(huì )因為參數中含有了不合法的UTF-8 字符而產(chǎn)生異常,從而導致無(wú)法正常的解析參數。
 
稍后請見(jiàn)詳細描述。

大家可以用我后面的程序作一個(gè)試驗:
首先把resin的缺省編碼設為UTF-8:
<log id=‘/‘ href=‘stderr:‘ timestamp="[%H:%M:%S.%s]"/>

<web-app character-encoding=‘UTF-8‘>
....
    <servlet>
        <servlet-name>character</servlet-name>
        <servlet-class>com.chedong.weblucene.CharacterEncodingTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>character</servlet-name>
        <url-pattern>/character</url-pattern>
    </servlet-mapping>
....
</web-app>

然后訪(fǎng)問(wèn)http://localhost:8080/weblucene/search?encoding=UTF-8&q=%E5%8C%97%E4%BA%AC,在resin 的log 中你會(huì )發(fā)現:
[19:10:52.484] java.io.CharConversionException: illegal utf8 encoding
at com.caucho.vfs.i18n.UTF8Reader.read(UTF8Reader.java:102)
at com.caucho.vfs.ByteToChar.readChar(ByteToChar.java:179)
at com.caucho.vfs.ByteToChar.getConvertedString(ByteToChar.java:126)
at com.caucho.server.http.Form.parseQueryString(Form.java:100)
at com.caucho.server.http.Request.parseQuery(Request.java:1352)
at com.caucho.server.http.Request.getParameterValues(Request.java:1449)
at com.caucho.server.http.Request.getParameter(Request.java:1459)
at com.chedong.weblucene.CharacterEncodingTest.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:103)
at com.caucho.server.http.FilterChainServlet.doFilter(FilterChainServlet.java:96)
at com.caucho.server.http.Invocation.service(Invocation.java:315)
at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:246)
at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:163)
at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
at java.lang.Thread.run(Thread.java:536)

附:
1.測試程序
package com.chedong.weblucene;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CharacterEncodingTest extends HttpServlet {
    //~ Static fields/initializers ---------------------------------------------
    /** The global logger, it will be configured when the servlet loaded */
    private static Logger logger = Logger.getLogger(CharacterEncodingTest.class.getName());
    //~ Methods ----------------------------------------------------------------
    public void destroy() {
        super.destroy();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        //request.setCharacterEncoding("ISO-8859-1");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        out.println("");
        out.println("");
        out.println("");
        out.println("");

        out.println("");
        System.out.println("i get a request, with encoding: " + request.getCharacterEncoding() + "
");
        String q = "empty";
        if(request.getParameter("q") != null) {
            String ie = request.getParameter("ie");
            if(ie == null) {
                ie = "gb2312";
            }
            q = request.getParameter("q");
            System.out.println("raw q:" + q + ".");
            q = new String(q.getBytes("iso-8859-1"), ie);
            System.out.println("parsed q with(" + ie + "):" + q);
        } else {
            q = "null";
            Enumeration params = request.getParameterNames();
            while(params.hasMoreElements()) {
                String param = (String) params.nextElement();
                System.out.println("param: " + param + "-" + request.getParameter(param) + ".<br/>");
            }
        }
        out.println(q);
        out.println("");
        out.println("");
        /* flush the buffer */
        out.flush();
        out.close();
    }
    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
    }
}


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Servlet Get Post請求
JSP+ MySQL中文亂碼問(wèn)題post提交亂碼解決方案
Java
關(guān)于JSP/Servlet字符編碼
JavaWeb學(xué)習篇之
Servlet中直接response.getWriter().write() 輸出亂碼解決!
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久