【发布时间】: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吗?
-
很高兴它解决了这个问题。我将其转发为答案。