读书人

今晚有高手在么快进来 再线等。解决

发布时间: 2012-01-02 22:40:04 作者: rapoo

今晚有高手在么,快进来 再线等。



我们做网页的时候 如果源代码中的是 中文
浏览器回给解释成中文 “中文” 两个字符,请问这样的对应关系或者说原理是什么。

而且如果你的 页面设置了
<%@ page contentType= "text/html; charset=iso_8859-1 "%>

那么你在页面 form 里面提交的 中文字符会被编码成为 &# 加 五个数字加分号 的形式,我接受到 这样的提交结果后怎样处理才能式正确的中文。

向大家请教了




[解决办法]
编码转换以下就可以了
String s=new String(Request.getParameter( "??? ").getBytes( "iso-8859-1 "));
[解决办法]
编码问题
[解决办法]
编码转换

[解决办法]
Request.getParameter( "??? ").getBytes( "iso-8859-1 ")
解决就可以了。
[解决办法]
编码问题
要么String s=new String(s.getBytes( "iso-8859-1 "), "GBK ");
或者写个FILTER来解决编码问题 后者比较好

[解决办法]
给你两个转换的工具类
页面与页面之间的
public class ParamUtil {
/**
* 获得request中指定名称的参数值,若有中文乱码问题请增加转码部分
*
* @param request
* ServletRequest对象
* @param paramName
* 参数名称
* @return 如果该变量值存在则返回该值,否则返回 " "
*/
public static String getParameter(ServletRequest request, String paramName) {
String temp = request.getParameter(paramName);
if (temp != null && !temp.equals( " ")) {
// 若有中文问题,请将下面语句注释
try {
temp = new String(temp.getBytes( "8859_1 "), "GB2312 ");
} catch (Exception e) {
return " ";
}
return temp;
} else {
return " ";
}
}

/**
* 获得request中的int型参数值
*
* @param request
* ServletRequest对象
* @param paramName
* 参数名称
* @param defaultNum
* 默认值,如果没有返回该值
* @return 如果该参数值存在则返回其转换为int型的值,否则返回defaultNum
*/
public static int getIntParameter(ServletRequest request, String paramName,
int defaultNum) {
String temp = request.getParameter(paramName);
if (temp != null && !temp.equals( " ")) {
int num = defaultNum;
try {
num = Integer.parseInt(temp);
} catch (Exception ignored) {
}
return num;
} else {
return defaultNum;
}
}
}

页面到数据库的 我用的是过滤器
public class EncodingFilter extends HttpServlet implements Filter {

private static final long serialVersionUID = 1L;

/* 过滤器引用 */
private FilterConfig filterConfig = null;

/* 字符集变量 */
private String charSet = null;

/* 过滤器转换字符集 */
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
/* 获得应用程序配置的字符集 */
charSet = (String) filterConfig.getInitParameter( "charSet ");

/* 设置Http字符集的请求为系统的默认字符集 */
HttpServletRequest req = (HttpServletRequest) request;
req.setCharacterEncoding(charSet);

/* 获得Http的响应 */
HttpServletResponse res = (HttpServletResponse) response;

/* 转发道请求的资源 */
chain.doFilter(req, res);


} catch (Exception e) {
System.out.println( "EncodingFilter " + e.getMessage());
// PrintWriter out = response.getWriter();
// out.println( "Please Login ");
}
}

/* 过滤器销毁 */
public void destroy() {
this.filterConfig = null;
this.charSet = null;
}

/* 过滤器初始化 */
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
}

在web.xml中加上
<filter>
<filter-name> EncodingFilter </filter-name>
<filter-class> com.menu.servlet.EncodingFilter(EncodingFilter类在工程中的位置) </filter-class>
<init-param>
<param-name> charSet </param-name>
<param-value> UTF-8 </param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name> EncodingFilter </filter-name>
<url-pattern> /* </url-pattern>
</filter-mapping>

[解决办法]
同意jyplp的意见,
那个就是UNICODE的内码,我记得好像有个工具可以做这个转换,JDK里面带着,忘记名字了。
使用Eclipse编写中文网页的话,保存之后就会是那个样子的。
[解决办法]
> 我想了好久的结果是这样的:如下

楼主理解的是对的。&#nnnnn; 这种表示法是 HTML 中用于表述特殊字符的方式(其实是来自 XML 的表述方式),这里的 nnnnn 是用十进制表示的 UNICODE 码。

<%@ page contentType= "text/html; charset=iso_8859-1 "%> 这种东西是程序员用来告诉编译器这个 JSP 文件本身是用什么字符集编写的(注意是 JSP 文件本身,而不是指它将来能显示什么)。而这样做的一个连带效应就是 WEB Server(比如 Tomcat)会告诉浏览器(比如 IE)传过来的文件(就是那个 HTML 内容)的编码方式(同样,这里指的是 HTML 字符流本身的编码方式,而不是指这个 HTML 显示出来的样子)。当 IE 知道了这个 HTML 页面的传输编码方式是 iso-8859-1 的,它就会认为 WEB Server 是以这种方式来解析它提交上去的 FORM,所以 IE 就会以 iso-8859-1 的编码方式来处理将要提交的值。而 iso-8859-1 的编码方式支持的字符集只是 ASCII 字符集,无法表达中文字符,所以就启用了 &#nnnnn; 这种“转义”方法。

如果你在服务器端收到了 "&#nnnnn; " 这样的字符串,要想把它转成真正的中文字符,那就只能自己解析字符串喽。其实,除非你想在同一个页面里“同时支持”多种语言的字符,否则不要用 iso-8859-1 作为页面的编码方式,用 GBK 好了。
[解决办法]
String s=new String(Request.getParameter( "??? ").getBytes( "iso-8859-1 "));

读书人网 >J2SE开发

热点推荐