求解:jsp页面 中文乱码的问题

jsp页面通过js代码判断之后alert出来的中文是乱码,编码都是用的UTF-8,请问要怎么解决?

假如你的这样的汉字有点多,你这样,你把所有汉字一句句的放在放在一个properties的文件里面,用这个工具统一转,方法如下:
在dos进入你的properties所在的文件夹,输入命令 [code="java"] native2ascii -encoding UTF-8 ApplicationResources_zh_src.properties ApplicationResources_zh.properties[/code]

前者是你原始的,后者是你转化后的。

然后你懂的,你copy到你项目中。

再搞不定 我去跳黄浦江。

jsp文件本身是否是utf-8编码?
content="text/html; charset=utf-8" 是否加上了?

其他地方没有乱码吧 只是页面出现的?
你能贴出你代码吗 我看看。

Myeclipse中
General-->Editors-->Text Editors-->spelling里面也有设置编码的 你也可以看一下。

要不也试试 把 contentType 换成
contentType="text/html;charset=UTF-8"

你是指 myalert() 方法么?没见你调用这个方法啊。何时调用这个方法呢?这样也让我们好实验一下啊

右击页面 点击最下面的Preference。

那你说一下是触发的哪个JS代码弹出的对话框显示的乱码吧

用过滤器
在包package filters 中创建SetCharacterEncodingFilter.java 代码如下
然后在配置文件中
[code="java"]
/*

  • Copyright 2004 The Apache Software Foundation *
  • Licensed under the Apache License, Version 2.0 (the "License");
  • you may not use this file except in compliance with the License.
  • You may obtain a copy of the License at *
  • http://www.apache.org/licenses/LICENSE-2.0 *
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS,
  • WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  • See the License for the specific language governing permissions and
  • limitations under the License. */

package filters;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**

  • Example filter that sets the character encoding to be used in parsing the

  • incoming request, either unconditionally or only if the client did not
  • specify a character encoding. Configuration of this filter is based on
  • the following initialization parameters:
    • encoding - The character encoding to be configured
    • for this request, either conditionally or unconditionally based on
    • the ignore initialization parameter. This parameter
    • is required, so there is no default.
    • ignore - If set to "true", any character encoding
    • specified by the client is ignored, and the value returned by the
    • selectEncoding() method is set. If set to "false,
    • selectEncoding() is called only if the
    • client has not already specified an encoding. By default, this
    • parameter is set to "true".
    *

    Although this filter can be used unchanged, it is also easy to

    subclass it and make the selectEncoding() method more intelligent about what encoding to choose, based on characteristics of the incoming request (such as the values of the Accept-Language and User-Agent headers, or a value stashed in the current user's session. * @author Craig McClanahan @version $Revision: 1.1 $ $Date: 2008/03/24 02:33:46 $ */

    public class SetCharacterEncodingFilter implements Filter {

    // ----------------------------------------------------- Instance Variables
    
    
    /**
     * The default character encoding to set for requests that pass through
     * this filter.
     */
    protected String encoding = null;
    
    
    /**
     * The filter configuration object we are associated with.  If this value
     * is null, this filter instance is not currently configured.
     */
    protected FilterConfig filterConfig = null;
    
    
    /**
     * Should a character encoding specified by the client be ignored?
     */
    protected boolean ignore = true;
    
    
    // --------------------------------------------------------- Public Methods
    
    
    /**
     * Take this filter out of service.
     */
    public void destroy() {
    
        this.encoding = null;
        this.filterConfig = null;
    
    }
    
    
    /**
     * Select and set (if specified) the character encoding to be used to
     * interpret request parameters for this request.
     *
     * @param request The servlet request we are processing
     * @param result The servlet response we are creating
     * @param chain The filter chain we are processing
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet error occurs
     */
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
    throws IOException, ServletException {
    
        // Conditionally select and set the character encoding to be used
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
                request.setCharacterEncoding(encoding);
        }
    
    // Pass control on to the next filter
        chain.doFilter(request, response);
    
    }
    
    
    /**
     * Place this filter into service.
     *
     * @param filterConfig The filter configuration object
     */
    public void init(FilterConfig filterConfig) throws ServletException {
    
    this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null)
            this.ignore = true;
        else if (value.equalsIgnoreCase("true"))
            this.ignore = true;
        else if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
        else
            this.ignore = false;
    
    }
    
    
    // ------------------------------------------------------ Protected Methods
    
    
    /**
     * Select an appropriate character encoding to be used, based on the
     * characteristics of the current request and/or filter initialization
     * parameters.  If no character encoding should be set, return
     * <code>null</code>.
     * <p>
     * The default implementation unconditionally returns the value configured
     * by the <strong>encoding</strong> initialization parameter for this
     * filter.
     *
     * @param request The servlet request we are processing
     */
    protected String selectEncoding(ServletRequest request) {
    
        return (this.encoding);
    
    }
    

    }

    [/code]
    然后在web.xml中配置一下
    [code="java"]
    <!-- 定义字符编码转换 -->

    Set Character Encoding
    filters.SetCharacterEncodingFilter

    encoding
    gb2312


    ignore
    true


    [/code]

    这样就应该没问题了

    你把你调用的那个文件都这样页面编码一下。

    还有 不知道你这样改了没有 contentType="text/html;charset=UTF-8"

    你是指:
    [code="java"]

    alert("该附件已经上传,请选择其他附件!");

    return;

    }

    }

    if(file_name.indexOf("<")>=0 || file_name.indexOf(">")>=0 || file_name.indexOf("#")>=0 ||

    file_name.indexOf("&")>=0 || file_name.indexOf(";")>=0 || file_name.indexOf("+")>=0 ||

    file_name.indexOf(",")>=0 || file_name.indexOf("\'")>=0 || file_name.indexOf("\"")>=0 ){

    alert('请不要上传带“<、>、#、&、;、+、,、\'、\"”名字的文件,可以输入全角的,请修改名字再上传!');

    }else if(file_name.indexOf(" ")>=0){

    alert("上传的附件名不能包含两个或两个以上相邻的空格字符!");

    }else if(file_name.indexOf("正式文件.doc")!=-1 ){

    alert("上传的附件中不能包含“正式文件.doc”关键字样!");

    }else if(len-ixg>100){

    alert("上传的附件名字太长!");

    [/code]

    这些个 alert 有打印出乱码?

    [quote]有过滤器 而且 我只是调用这个jsp页面里面的js的代码弹框出现乱码 都没有到外面去的 [/quote]
    如果把这个值,直接显示在页面上是否乱码呢?

    你把这几个alert删除掉,然后自己在上面一个个写出来。

    你那在

    [code="java"]

    1. # alert("该附件已经上传,请选择其他附件!");
    2. # return;
    3. # }
    4. # }
    5. #
    6. # if(file_name.indexOf("<")>=0 || file_name.indexOf(">")>=0 || file_name.indexOf("#")>=0 ||
    7. # file_name.indexOf("&")>=0 || file_name.indexOf(";")>=0 || file_name.indexOf("+")>=0 ||
    8. # file_name.indexOf(",")>=0 || file_name.indexOf("\'")>=0 || file_name.indexOf("\"")>=0 ){
    9. # alert('请不要上传带“<、>、#、&、;、+、,、\'、\"”名字的文件,可以输入全角的,请修改名字再上传!');
      1. # }else if(file_name.indexOf(" ")>=0){
      2. # alert("上传的附件名不能包含两个或两个以上相邻的空格字符!");
      3. # }else if(file_name.indexOf("正式文件.doc")!=-1 ){
      4. # alert("上传的附件中不能包含“正式文件.doc”关键字样!");
      5. # }else if(len-ixg>100){
      6. # alert("上传的附件名字太长!");
        [/code]

    中的每一个 alert 前再分别加一个 alert,看看到底是哪一个打印了乱码出来

    我猜想有可能这个项目是从另外一个机器copy下来或者down下来的。两个机器的文件编码不一样。所以你先删除alert里面的字 用自己机器写出来试试。

    晕,你alert出来的都是写死的中文数据,如果是乱码的话,1就是js文件的编码,2就是浏览器的查看页面的字符编码。你试试用其他浏览器看看有没有问题。

    你把这几个alert里面的中文删除掉,然后自己在上面一个个汉字写出来。
    我猜想有可能这个项目是从另外一个机器copy下来或者down下来的。两个机器的文件编码不一样。所以你先删除alert里面的字 用自己机器写出来试试。

    大哥你先试试把

    真汗...Tomcat里设置编码了么

    用资源文件处理吧 这样应该能解决

    [color=blue]
    1. # alert("该附件已经上传,请选择其他附件!");

    2. 2. # return;

    3. 3. # }

    4. 4. # }

    5. 5. #

    6. 6. # if(file_name.indexOf("<")>=0 || file_name.indexOf(">")>=0 || file_name.indexOf("#")>=0 ||

    7. 7. # file_name.indexOf("&")>=0 || file_name.indexOf(";")>=0 || file_name.indexOf("+")>=0 ||

    8. 8. # file_name.indexOf(",")>=0 || file_name.indexOf("\'")>=0 || file_name.indexOf("\"")>=0 ){

    9. 9. # alert('请不要上传带“<、>、#、&、;、+、,、\'、\"”名字的文件,可以输入全角的,请修改名字再上传!');

    10.10. # }else if(file_name.indexOf(" ")>=0){

    11.11. # alert("上传的附件名不能包含两个或两个以上相邻的空格字符!");

    12.12. # }else if(file_name.indexOf("正式文件.doc")!=-1 ){

    13.13. # alert("上传的附件中不能包含“正式文件.doc”关键字样!");

    14.14. # }else if(len-ixg>100){

    15.15. # alert("上传的附件名字太长!"); [/color]

    再不行改成GBK
    content="text/html; charset=GBK"

    教你一个终极的解决方案:
    1,进入你的java目录下的jdk 的bin目录,比如我的是C:\Java\jdk16\bin,
    看到里面有个native2ascii.exe,双击,然后把你需要转化的汉字输入,比如你的
    "上面的附件名字太长" 此时会给你转话成unicod。然后把转化的放入你的alert,比如转化成\u5fc5\u987b\u7b26\u5408\u7684\u6761\u4ef6\u6700\u591a3\u4e2a,那么你的alert就变成alert("\u5fc5\u987b\u7b26\u5408\u7684\u6761\u4ef6\u6700\u591a3\u4e2a")。

    我的项目里面都是这么做的,只是有些不关键的页面是直接写中文。重要的js页面就得这么做。