问题记录之中文乱码

0.在request.getAttribute()方法前设置request.setCharacterEncoding("UTF-8")
1.在tomcat中的server.xml文件中配置服务器端的编码方式:

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP
 
 
 
/1.1" redirectPort="8443"/>
2.在web.xml文件中配置客户端的编码方式:
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
 
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

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

===========================================================================
系统化确认解决乱码问题:
1.首先应确定不是因为浏览器的原因导致中文乱码

ie:“internet选项/高级”中“总以utf-8发送网址”的选项的配置;
firefox:地址栏中输入about:config,修改network.standard-url.escape-utf8 为False (缺省为True);
如果你想让浏览器直接url-encode成utf-8,修改network.standard-url.encode-utf8为true(缺省为false)。
prefs.converted-to-utf8

2.tomcat服务器配置server.xml文件
主要用户处理与页面交互时产生的乱码问题,例如提交表单等。
<!– Define a non-SSL HTTP/1.1 Connector on port 80–>
<Connector acceptCount=”100″ connectionTimeout=”20000″ disableUploadTimeout=”true” enableLookups=”false” maxHttpHeaderSize=”8192″ maxSpareThreads=”75″ maxThreads=”150″ minSpareThreads=”25″ port=”80″ redirectPort=”8443″ URIEncoding=”GBK”useBodyEncodingForURI=”true” />


URIEncoding用来设定通过 URI 传递的内容使用的编码,tomcat 将使用这里指定的编码对客户端传送的 内容进行编码。我们通过 get 方法提交的参数实际上都是通过 uri 提交的,由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认 的 iso8859-1 对客户端的内容进行编码。
useBodyEncodingForURI使用与 Body 一样的编码来处理 URI, 这个设定是为了 与 tomcat4保持兼容,原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的, 在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通 过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而, 在 tomcat5 中,get 与 post 的处理是分开进行的,对 get 的处理通过前面的 URIEncoding进行处理,对 post 的 内容依然通过 request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。
所以,设置URIEncoding解决get中的参数问题,配置过滤器解决post的参数问题;或者设置useBodyEncodingForURItrue,get、post都使用过滤器来解决参数问题。


3.数据库bean配置
主要针对与数据库交互时产生的乱码问题,例如插入中文记录或读取中文数据。
<property name=”driverClassName”>
<value>com.mysql.jdbc.Driver</value>
</property>
<property name=”url”>
<value>jdbc:mysql://localhost:3306/newfang?useUnicode=true&amp;characterEncoding=gbk&amp;autoReconnect=true</value>
</property>

4.代码中局部解决乱码问题

   主要用于解决个别乱码问题,例如网页显示时中文均显示正常除一两条语句外,那么针对这一两条语句的乱码问题可用该方法。
qString = new String(qString.getBytes(“ISO8859_1″), “GBK”);
 qString = URLEncoder.encode(qString, “GBK”); //java url 编码方法


5.web.xml配置,添加filter过滤器

   用于处理全站乱码问题,其实主要也是用于action与jsp页面交互时使用。
<!– 用于解决中文乱码问题 –>
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.qa.util.SetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

SetEncodingFilter代码:
package com.qa.util;
import javax.servlet.*;
import java.io.*;

public class SetEncodingFilter implements Filter
{
protected String encoding=null;//定义缺省字符编码方式
protected boolean ignore=true;//定义客户端指定的编码方式是否应被忽略
protected FilterConfig filterConfig=null;//定义过滤器配置对象,若为null,则说明过滤器未配置

public void destroy()//停止过滤器的工作
{
this.encoding=null;
this.filterConfig=null;
}
//设置字符编码
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
throws IOException,ServletException
{
if(ignore||(req.getCharacterEncoding()==null))
{
req.setCharacterEncoding(selectEncoding(req));
}
chain.doFilter(req,res);
}
//启动过滤器
public void init(FilterConfig filterConfig)throws ServletException
{
this.filterConfig=filterConfig;
this.encoding=filterConfig.getInitParameter(“encoding”);
String value=filterConfig.getInitParameter(“ignore”);
if(value==null) this.ignore=true;
else if(value.equalsIgnoreCase(“true”)
||value.equalsIgnoreCase(“yes”)) this.ignore=true;
else this.ignore=false;
}
//选择合适的字符编码方式
protected String selectEncoding(ServletRequest req)
{
return this.encoding;
}
//返回filterConfig对象
public FilterConfig getFilterConfig()
{
return filterConfig;
}
//设置filterConfig对象
public void setFilterConfig(FilterConfig filterConfig)
{
this.filterConfig=filterConfig;
}
}


6.服务器apache上的乱码。
除了以上的情况外,还有apache的配置问题,注意的方面有以下几点:
1)conf/httpd.conf
把AddDefaultCharset ISO-8859-1 改成 AddDefaultCharset GBK

    2)apache进行了rewrite
把需要rewrite的url中的中文参数进行两次编码(encode),因为apache在rewrite时会做一次url解码,这时jk进行请求转发时,就不会再是编码后的字符串了;
或者在接收请求时先用ISO-8859-1取字节流,再使用UFT-8来new String。(new String(str.getBytes(“ISO-8859-1″),”UFT-8″))

 

转载于:https://www.cnblogs.com/tjlr/p/9910912.html

### 解决 Node.js 中文乱码问题 #### 设置正确的字符编码 为了防止中文乱码,在读取文件或接收网络请求时应指定 UTF-8 编码。当使用 `fs` 模块操作本地文件时,可以通过传递 `{encoding: 'utf8'}` 参数来确保以正确的方式解码字符串[^1]。 ```javascript const fs = require('fs'); // 正确设置文件编码为 utf8 fs.readFile('./example.txt', { encoding: 'utf8' }, (err, data) => { console.log(data); }); ``` #### 处理 HTTP 请求与响应中的编码 对于基于 Express 或其他 Web 框架构建的应用程序来说,可以在发送响应之前设定合适的 Content-Type 响应头,指明 charset=UTF-8[^3]: ```javascript app.get('/', function(req, res){ res.set({ 'Content-Type': 'text/html; charset=utf-8' }); // 继续处理... }); ``` 另外,如果是在客户端发起 POST 请求并提交表单,则应在 HTML 表单标签内加入属性 accept-charset="UTF-8"[^5]。 #### 数据库连接配置 如果是数据库查询返回的结果存在乱码现象,那么可能是由于数据库驱动未被适当地告知要使用的字符集所致。针对 MySQL 客户端而言,建立连接的时候可以加上如下选项: ```javascript const mysql = require('mysql'); let connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db', charset : 'utf8mb4' // 明确指出采用的字符集 }); connection.connect(); ``` 以上措施能够有效减少乃至消除大部分场景下的中文乱码情况发生概率。当然,具体实施还需视项目实际情况灵活调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值