【问题标题】:jsp compile error [closed]jsp编译错误[关闭]
【发布时间】:2012-02-20 17:38:02
【问题描述】:

我在一个开源项目的jsp 页面中有以下行:

<html:option value="micg">µg</html:option>

当我使用maven 编译它时,会生成以下代码:

_jspx_th_html_005foption_005f9.setValue("micg");
    int _jspx_eval_html_005foption_005f9 = _jspx_th_html_005foption_005f9.doStartTag();
    if (_jspx_eval_html_005foption_005f9 != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {
      if (_jspx_eval_html_005foption_005f9 != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {
        out = _jspx_page_context.pushBody();
        _jspx_th_html_005foption_005f9.setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);
        _jspx_th_html_005foption_005f9.doInitBody();
      }
      do {
        out.write('Â');
        out.write('µ');
        out.write('g');
        int evalDoAfterBody = _jspx_th_html_005foption_005f9.doAfterBody();
        if (evalDoAfterBody != javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)
          break;
      } while (true);
      if (_jspx_eval_html_005foption_005f9 != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {
        out = _jspx_page_context.popBody();
      }
    }

这导致编译生成的java 文件时出现以下错误:

[javac] Compiling 1375 source files
[javac] warning: [options] bootstrap class path not set in conjunction 
          with -source 1.5
[javac] D:\src\WriteScript_jsp.java:2310: error: unclosed character literal
[javac]         out.write('Â');
[javac]                   ^
[javac] D:\src\WriteScript_jsp.java:2310: error: illegal character: \8218
[javac]         out.write('Â');
[javac]                     ^
[javac] D:\src\WriteScript_jsp.java:2310: error: unclosed character literal
[javac]         out.write('Â');
[javac]                      ^
[javac] D:\src\WriteScript_jsp.java:2311: error: unclosed character literal
[javac]         out.write('µ');
[javac]                   ^
[javac] D:\src\WriteScript_jsp.java:2311: error: ';' expected
[javac]         out.write('µ');
[javac]                     ^
[javac] D:\src\WriteScript_jsp.java:2311: error: unclosed character literal
[javac]         out.write('µ');
[javac]                      ^
[javac] 6 errors

请帮助我如何消除此错误:(我使用的是 Windows 7 64 位和 JDK 版本 1.7。

【问题讨论】:

  • javac 使用默认字符编码。尝试使用-encoding 选项来匹配源文件的字符编码。
  • 我对 Maven 部分一无所知,但我至少可以看出生成的 Java 源代码中存在 Â 表明您已将 JSP 源代码保存为 ISO- 8859-x 而不是 UTF-8(或者 JSP 解析器将其读取为 ISO-8859-x 而不是 UTF-8)。在 Maven 中检查/重新配置您的源代码提取器或编辑器。
  • 是的@BalusC 这只是在黑暗中拍摄,我从 Notepad++ 中的 Encoding 菜单中检查并检查了 Encode in UTF-8 without BOM。我检查了Convert to UTF-8,它现在正在编译。仍然有错误,但这个已经永远消失了。
  • 你试过把整个项目的字符集改成UTF-8吗?
  • 很高兴它解决了这个问题。我将其转发为答案。

标签: java jsp maven


【解决方案1】:

在生成的 Java 源代码中出现 Â 表示您已将 JSP 源代码保存为 ISO-8859-x 而不是 UTF-8(或者 JSP 解析器将其读取为 ISO-8859-x而不是 UTF-8,这不太可能)。检查/重新配置您的源代码编辑器并确保它将 JSP 源代码保存为 UTF-8。

【讨论】:

    【解决方案2】:

    按照其他响应者的建议,确保 -encoding 处处正确的替代方法是不要在文件中使用非低位 ASCII 字符。这可以通过\u 转义来完成,例如,通过编写:

     out.write('\u006c');
    

    ..而不是:

     out.write('Â');
    

    远不及漂亮或方便,但更容易在大型团队中工作,特别是如果您的应用程序中的有限位置只有可怕的外国月亮语言字符,因为大多数处理此类事情的开发团队都会这样做.

    【讨论】:

    • 这是来自生成的文件 (jsp -> java)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多