编码与乱码

乱码的根源

源编码与目标编码的不一致. 而中文window系统默认编码GBK,害惨了多少程序员.

要尽量减少出现乱码,我个人认为要做到5码合一, IDE(Eclipse/idea),页面(jsp/其他模板引擎),应用服务器(tomcat等), 源码(Java源码及周边文件),数据库编码.

将Eclipse设置为UTF-8

打开Eclipse安装目录下的eclipse.ini,在最末尾新增一行

-Dfile.encoding=UTF-8

修改之后的,重启eclipse即可.

JSP页面编码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

tomcat编码

打开 tomcat安装目录下的 bin\setenv.bat ,该文件通常不存在,新建之, 添加如下内容

set JAVA_OPTS=-Dfile.encoding=UTF-8

打开conf\server.xml, 在8080端口所属的Connector节点,添加URIEncoding,可解决大部分GET请求中文乱码的问题

URIEncoding="UTF-8"

源码的编码

通常情况下, 文件本身的编码,取决于新建文件时,IDE或Project的编码.

另外一个隐藏的编码,是maven/ant编译java源文件时使用的编码

maven的配置如下

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

数据库编码

通常来说,如果其他4码解决了,那大部分情况下是mysql会出现编码问题

mysql有4个编码

Server characterset:    utf8      // 服务器字节集
Db     characterset:    utf8      // 当前数据集字节集
Client characterset:    utf8      // 客户端字节集
Conn.  characterset:    utf8      // 当前连接的字节集

修改my.ini的mysqld小节,设置服务器字符集,是最佳解决方式

[mysqld]
character-set-server = utf8

然而,对于现有系统,全局修改的风险比较大,所以,可以在客户端解决,即jdbcurl上做配置

jdbc:mysql://127.0.0.1/nutzdemo?useUnicode=true&characterEncoding=UTF-8

参考资料:

1.编码与乱码 (wendal大神)

原文地址:https://www.cnblogs.com/jycjy/p/11570438.html

时间: 2024-10-13 12:50:34

编码与乱码的相关文章

Java编码与乱码问题

一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8个bit,所以能表示的字符范围是0~255个,这满足不了人类的需要,要解决这个矛盾必须需要一个新的数据结构char,从char到byte必须经过编码. 二.常用编码介绍 ASCII码 总共128个,用一个字节的低7位表示,0~31是控制字符,如换行.回车.删除等,32~126是打印字符,可以通过键盘

JSP/Servlet编码导致乱码问题

JSP/Servlet编码导致乱码问题 jsp页面的三处编码:       1.<%@ page language="java" pageEncoding="UTF-8"%>         作用:告诉jsp编译器将jsp编译成Servlet时使用的字符编码         例如,你的JSP文件是以GBK为编码保存的 (右击jsp-->Properties --> Text file encoding                设置成与p

Microsoft excel 打开utf-8编码csv乱码问题

<?php /* 其实这个问题很久之前遇到过, 应该是没解决, 当时的情况是openoffice打开正常而excel打开不正常, 后来也没解决了, 只能把编码转了. 这次又遇到这个问题了, 在网上一番寻找, 在一篇java的文章里找到了原因, 是由于输出的CSV文件中没有BOM. 什么是BOM? 在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建议我们在传输字节流

java获取常见文本文件的编码 解决乱码问题

乱码问题的产生一般是,由字节流转字符流的时候,读文件的编码与文件的系统编码不一致造成的. 解决方式:先自动判断文件系统编码类型,然后读的时候用这个类型去读就ok了. 自动判断文件系统编码类型代码如下, 地址:http://www.cnblogs.com/java0721/archive/2012/07/21/2602963.html java获取常见文本文件的编码 解决乱码问题

HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码

原文地址:HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码 HttpServletResponse  和 ServletResponse  都是接口 具体的类型对象是由Servlet容器传递过来 ServletResponse对象的功能分为以下四种: ?        设置响应头信息: ?        发送状态码: ?        设置响应正文: ?        重定向: 设置响应头

JAVA IO ( 编码_乱码_解码 )

public class Index { public static void main(String[] args) { String s = "黄伟强"; try { // 编码(编码方式 GBK:国标 UTF-8:国际通用 ISO-8859-1:美洲 默认为当前项目的编码) byte[] b = s.getBytes("UTF-8"); System.out.println(Arrays.toString(b)); // 乱码的解码方式(编码和解码使用不同的字

Eclipse修改编码后乱码解决

Eclipse用了一段时间,都是用的gbk编码的,突然想要规范下,强迫症犯了,于是将在Window->Preference->Appearances->Workspace修改Text file encoding为UFT-8,一点击确认,Oh,My God!中文都乱码了,一开始想的是用记事本将文件一个一个的另存为UTF-8格式,累死了,发现工程量太大,放弃了,转战代码,下面是可实现的代码,支持批量处理(即处理一个文件夹内的所有代码),不支持文件夹下还有文件夹的情况!代码如下: packag

GET和POST 编码和乱码

1.  什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上. 2.  URL编码规则. 每对name/value由&分开,每对来自表单的name/value用=分开.如果用户没有输入值的那个name依旧会出现不过就是没有值. URL编码是在字符ASCII码的十六进制数的前面加上%.例如\(她的十六进制数表示为5c)的URL编码就是%5c. 3.  简

Android Studio中编码(乱码)问题的解决方案

在Android Studio中,无论是自己新建的项目,还是import的项目,亦或是从网络返回的数据,只要其中涉及中文,极有可能会出现乱码问题,导致在手机界面上显示达不到预期的效果.如下所示: . 解决方案如下: (1)打开FIle-->Settings-->Editor-->File Encodings,会出现以下界面: . 一般只要设置上方的IDE Encoding和Project Encoding.前者指IDE的编码方式,后者指你的Project的编码.一般都可以设置为UTF-8