字符集编码 idea解决乱码


字符编码原理

字符集编码

ASCII字符集
共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行编码,我们看一些字符的编码方式:

'L' ->  01001100(十六进制:0x4C,十进制:76'M' ->  01001101(十六进制:0x4D,十进制:77

ISO 8859-1字符集
共收录256个字符,是在ASCII字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用1个字节来进行编码。这个字符集也有一个别名latin1。

GB2312字符集
收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其他文字符号682个。同时这种字符集又兼容ASCII字符集,所以在编码方式上显得有些奇怪:

  • 如果该字符在ASCII字符集中,则采用1字节编码。
  • 否则采用2字节编码。

这种表示一个字符需要的字节数可能不同的编码方式称为变长编码方式

比方说字符串'爱u',其中'爱'需要用2个字节进行编码,编码后的十六进制表示为0xB0AE'u'需要用1个字节进行编码,编码后的十六进制表示为0x75,所以拼合起来就是0xB0AE75

我们怎么区分某个字节代表一个单独的字符还是代表某个字符的一部分呢?别忘了ASCII字符集只收录128个字符,使用0~127就可以表示全部字符,所以如果某个字节是在0~127之内的,就意味着一个字节代表一个单独的字符,否则就是两个字节代表一个单独的字符。

GBK字符集

GBK字符集只是在收录字符范围上对GB2312字符集作了扩充,编码方式上兼容GB2312。

Unicode字符集

收录地球上能想到的所有字符,而且还在不断扩充。这种字符集兼容ASCII字符集,采用变长编码方式,
Unicode字符集有多种编码方案,可以采用utf8、utf16、utf32这几种编码方案,utf8使用1~4个字节编码一个字符,utf16使用2个或4个字节编码一个字符,utf32使用4个字节编码一个字符。

对于同一个字符,不同字符集也可能有不同的编码方式。比如对于汉字’我’来说,ASCII字符集中根本没有收录这个字符,utf8和gb2312字符集对汉字我的编码方式如下:

utf8编码:111001101000100010010001 (3个字节,十六进制表示是:0xE68891)
gb2312编码:1011000010101110 (2个字节,十六进制表示是:0xB0AE)

idea解决乱码

在下面两个文件中最后一行加上 -Dfile.encoding=UTF-8
在这里插入图片描述

settings-- file encoding
在这里插入图片描述

-Dfile.encoding=UTF-8
在这里插入图片描述

在这里插入图片描述
rebuild

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 Tomcat 中的乱码问题,有几种可能的解决方法: 1. 设置 URIEncoding:在 Tomcat 的 server.xml 文件中,找到 <Connector> 元素,添加属性 URIEncoding="UTF-8",如下所示: ```xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" /> ``` 这样可以将 URI 请求的编码设置为 UTF-8,以防止乱码。 2. 设置默认字符集:在 web.xml 文件中,添加以下内容: ```xml <filter> <filter-name>encodingFilter</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> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 这样可以将请求和响应的字符集设置为 UTF-8。 3. 手动设置字符集:在处理请求或响应时,可以通过设置字符编码解决乱码问题。例如,在 Servlet 中可以使用以下代码: ```java request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); ``` 4. 检查数据库连接字符集:如果使用了数据库,还需要确保数据库连接的字符集与应用程序一致。可以在数据库连接字符串中指定字符集,例如: ```java jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=UTF-8 ``` 这样可以将数据库连接的字符集设置为 UTF-8。 以上是一些常见的解决乱码问题的方法,根据具体情况选择适合的方法来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值