从数据库中读取的汉字都变成了乱码

时间:2021-01-16 06:40:07
我建立了个web程序,前几天还好好的,从数据库中读取的汉字还好着呢。但昨天把笔记本借给别人后拿回来,
汉字就都成乱码了,不知道他动了什么,而且在SQL Server环境下看都好着呢。我用的IDE是NetBeans数据库是SQL Server,这怎么解决呢?

14 个解决方案

#1


学习===

#2


首先保证数据库中编码格式是不是utf-8或者gb2312其次看看页面接收的时候是不是这种格式,还有在request或者response接收和返回请求的时候也要这样的格式,最后还是不行的话,那就要每个字符来转码了,这个网上有很多中,楼主可以看看

#3


楼上正解

#4


引用 2 楼 lieri111 的回复:
首先保证数据库中编码格式是不是utf-8或者gb2312其次看看页面接收的时候是不是这种格式,还有在request或者response接收和返回请求的时候也要这样的格式,最后还是不行的话,那就要每个字符来转码了,这个网上有很多中,楼主可以看看
那SQL Server中的编码格式怎么查看呢?我的是request.setCharacterEnCoding("GBK"),我在控制台下接收的时候也是乱码。

#5


数据库的编码一定要确定了,然后页面和后台编码直接写个过滤器~~~~~~~~~~~

#6


从数据库拉出来的汉字到页面成乱码很正常,因为你没在jsp页面转码,那就不是jsp前面的原因(gbk),你还要在<%(这里获取数据库的值,然后转码,若传给下个页面,那下个页面也要转)%>

#7


顶楼上的!

#8


引用 6 楼 d429003078 的回复:
从数据库拉出来的汉字到页面成乱码很正常,因为你没在jsp页面转码,那就不是jsp前面的原因(gbk),你还要在<%(这里获取数据库的值,然后转码,若传给下个页面,那下个页面也要转)%>

不是吧,我建了个控制台程序,从其中拉出来的汉字也是乱码。

#9


最好写个过滤器

#10


--输出中文乱码
response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。 

--请求中文乱码
request.setCharacterEncoding("GBK")或
request.setCharacterEncoding("gb2312")。 

--过滤器

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

  {

  request.setCharacterEncoding(encoding);

  response.setContentType("text/html;charset=GBK");

  chain.doFilter(request, response);

  } 

#11


引用 10 楼 xuhuanchao 的回复:
--输出中文乱码
response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。 

--请求中文乱码
request.setCharacterEncoding("GBK")或
request.setCharacterEncoding("gb2……

过滤代码是在页面中,还是在其他的类中,如果在类中,要导入什么呢?

#12


引用 11 楼 adventurous 的回复:
引用 10 楼 xuhuanchao 的回复:
--输出中文乱码
response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。

--请求中文乱码
request.setCharacterEncoding("GBK")或
request.s……

在web.xml中加入配置即可。

#13


  你在数据库底层中就使用setCharacterEncoding("GBK")把  不行的话 就再写个过滤器 

#14


引用 13 楼 zhao1988yuan 的回复:
你在数据库底层中就使用setCharacterEncoding("GBK")把 不行的话 就再写个过滤器

这个过滤器放在什么地方,是在其他的类中还是在页面中,如果在其他的类中,然后再在页面调用doFilter(doFilter(ServletRequest request, ServletResponse response, FilterChain chain)的话,最后的那个FilterChain参数从哪得到?
还有个问题,我的笔记本是借给别人后,她也不懂电脑,说是从工具栏里设置了一下,现在我系统里很多地方都变成了法语,从那之后我从数据库中提取汉字就变成乱码了。

#1


学习===

#2


首先保证数据库中编码格式是不是utf-8或者gb2312其次看看页面接收的时候是不是这种格式,还有在request或者response接收和返回请求的时候也要这样的格式,最后还是不行的话,那就要每个字符来转码了,这个网上有很多中,楼主可以看看

#3


楼上正解

#4


引用 2 楼 lieri111 的回复:
首先保证数据库中编码格式是不是utf-8或者gb2312其次看看页面接收的时候是不是这种格式,还有在request或者response接收和返回请求的时候也要这样的格式,最后还是不行的话,那就要每个字符来转码了,这个网上有很多中,楼主可以看看
那SQL Server中的编码格式怎么查看呢?我的是request.setCharacterEnCoding("GBK"),我在控制台下接收的时候也是乱码。

#5


数据库的编码一定要确定了,然后页面和后台编码直接写个过滤器~~~~~~~~~~~

#6


从数据库拉出来的汉字到页面成乱码很正常,因为你没在jsp页面转码,那就不是jsp前面的原因(gbk),你还要在<%(这里获取数据库的值,然后转码,若传给下个页面,那下个页面也要转)%>

#7


顶楼上的!

#8


引用 6 楼 d429003078 的回复:
从数据库拉出来的汉字到页面成乱码很正常,因为你没在jsp页面转码,那就不是jsp前面的原因(gbk),你还要在<%(这里获取数据库的值,然后转码,若传给下个页面,那下个页面也要转)%>

不是吧,我建了个控制台程序,从其中拉出来的汉字也是乱码。

#9


最好写个过滤器

#10


--输出中文乱码
response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。 

--请求中文乱码
request.setCharacterEncoding("GBK")或
request.setCharacterEncoding("gb2312")。 

--过滤器

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

  {

  request.setCharacterEncoding(encoding);

  response.setContentType("text/html;charset=GBK");

  chain.doFilter(request, response);

  } 

#11


引用 10 楼 xuhuanchao 的回复:
--输出中文乱码
response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。 

--请求中文乱码
request.setCharacterEncoding("GBK")或
request.setCharacterEncoding("gb2……

过滤代码是在页面中,还是在其他的类中,如果在类中,要导入什么呢?

#12


引用 11 楼 adventurous 的回复:
引用 10 楼 xuhuanchao 的回复:
--输出中文乱码
response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。

--请求中文乱码
request.setCharacterEncoding("GBK")或
request.s……

在web.xml中加入配置即可。

#13


  你在数据库底层中就使用setCharacterEncoding("GBK")把  不行的话 就再写个过滤器 

#14


引用 13 楼 zhao1988yuan 的回复:
你在数据库底层中就使用setCharacterEncoding("GBK")把 不行的话 就再写个过滤器

这个过滤器放在什么地方,是在其他的类中还是在页面中,如果在其他的类中,然后再在页面调用doFilter(doFilter(ServletRequest request, ServletResponse response, FilterChain chain)的话,最后的那个FilterChain参数从哪得到?
还有个问题,我的笔记本是借给别人后,她也不懂电脑,说是从工具栏里设置了一下,现在我系统里很多地方都变成了法语,从那之后我从数据库中提取汉字就变成乱码了。