今晚有高手在么,快进来 再线等。 我们做网页的时候 如果源代码中的是 中文浏览器回给解释成中文 “中文” 两个字符,请问这样的对应关系或者说原理是什么。 而且如果你的 页面设置了 <%@ page contentType="text/html; charset=iso_8859-1"%>那么你在页面 form 里面提交的 中文字符会被编码成为 &# 加 五个数字加分号 的形式,我接受到 这样的提交结果后怎样处理才能式正确的中文。 向大家请教了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 编码转换以下就可以了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> 个为老大你们说的都不对啊 。不是通常的编码问题的。new String("中文".getBytes("iso-8859-1"),"GBK");肯定还是原值的。我这里没有出现乱码,知识 汉字用另外一种方式表示了而已。 我想了好久的结果是这样的:如下&#***;是html的特殊字元真正有用的是***“中字的unicode 是 ff fe 2d 4e”而他对应的 表示是:20013 转换成16进制 是 4e 2d跟 uinicode 的后两位 正好反过来,是不是规律在这里。知道的同志们指导下给。大家给点意见或者资料。 同意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")); JAVA中如何将获得的InputStream 写入到一个文件里呢? GridBagLayout问题 Collection c = new HashSet();出错,为什么? DOM解析XML出错 SWT tableEditor的问题 请问如何获得当前窗口的ID,懂的人应该很简单散分 在JAVA中,键盘上的方向键(上,下,左,右)的代码是什么? 扇子进来,关于instanceof以及完美OOD与运行性能的疑惑! 请问哪里有JAVA学习的好中文网站 对象的参数传递问题 求一个算法问题!,如何得到2棵树,最下的子节点,并且判断是否是同一顺序。着急! 我的程序很乱很乱,谁帮我整理一下
String s=new String(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>
我这里没有出现乱码,知识 汉字用另外一种方式表示了而已。
是html的特殊字元
真正有用的是***“中字的unicode 是 ff fe 2d 4e”
而他对应的 表示是:20013 转换成16进制 是 4e 2d
跟 uinicode 的后两位 正好反过来,是不是规律在这里。知道的同志们指导下给。大家给点意见或者资料。
那个就是UNICODE的内码,我记得好像有个工具可以做这个转换,JDK里面带着,忘记名字了。
使用Eclipse编写中文网页的话,保存之后就会是那个样子的。