中文乱码的原因及解决方法

news/2024/10/28 21:23:31/

1、我们常用的编码表:

  ASCLL:美国标准信息交换码

     --->用一个字节的7位可以表示

ISO8859-1:拉丁码表、欧洲码表

    --->用一个字节的8位来表示

GB2312:中国的中文编码表

GBK:中国的中文编码表的升级。

      --->一个汉字用两个字节表示,每个字节的高位是1,所以汉字的byte形式是负数。

Unicode:国际标准码,融合了多种文字。

UTF-8:最多用三个字节表示一个字符

2、编码表的编码和解码步骤:

2.1先来了解下编码和解码的概念

  编码:字符串变成字节数组
  解码:字节数组变成字符串
  即:
  编码:String-->byte数组,str.getBytes();
  解码:byte-->String

2.2  GBK编码的转换流程

String str = "上海";byte[] b = str.getBytes();System.out.println(Arrays.toString(b));String s = new String(b,"gbk");System.out.println(s);


系统默认的编码是gbk编码,当调用getBytes()方法之后,“上海”二字转换成长度为4的字节数组,这里是编码的过程。

当new String(b,"gbk")时,用的是gbk的解码方式。所以能够解析出相应的汉字。若使用utf-8,那么就会出现中文乱码。

因此,解决中文来乱码的关键点 在于编码表的对应

演示编码不一致产生的中文乱码问题:

String str = "上海";byte[] b = str.getBytes("utf-8");System.out.println("汉字:"+str+"utf-8编码形式:"+Arrays.toString(b));String s = new String(b,"gbk");System.out.println("与之对应的gbk解码形式:"+s);

       由上面可以看出来:一个utf-8编码方式的汉字占用3个字节,而gbk编码方式占用2个字节。

3、产生ISO8859-1的中文乱码的解决方法:

   产生问题:

String str = "上海";byte[] b = str.getBytes();System.out.println("汉字:"+str+"gbk编码形式:"+Arrays.toString(b));String s = new String(b,"iso8859-1");System.out.println("与之对应的iso8859-1解码形式:"+s);

一个ISO8859-1编码占用一个字节。

解决方法:将乱码按照iso8859-1的编码格式重新编码,产生的编码还是那些字节数组[-55,-49,-70,-93],然后将这些字节数组按照GBK编码进行解码。

代码如下:

String str = "上海";byte[] b = str.getBytes();System.out.println("汉字:"+str+"gbk编码形式:"+Arrays.toString(b));String s = new String(b,"iso8859-1");System.out.println("与之对应的iso8859-1解码形式:"+s);byte[] b1 = s.getBytes("iso8859-1");System.out.println(s+"与之对应的iso8859-1编码形式:"Arrays.toString(b1));String s1 = new String(b1,"gbk");System.out.println(s1);
4、客户端与Tomcat之间产生的中文乱码

所以需要将ISO8859-1产生的中文乱码进行编码再解码。

即:new Stirng(b.getBytes("iso8859-1","gbk"));

若采用的是UTF-8编码,

 new String(b.getBytes("iso8859-1"),"utf-8");



以上是今天学到的一些内容之前在做网站时,一直会出现这些中文乱码的问题,尽管一些问题解决了,但是不了解这些问题的原因,今天在这里总结一下这些内容。自己能够进一步的了解,也希望对大家起到作用。






 


http://www.ppmy.cn/news/969565.html

相关文章

为什么会有中文乱码?

何为乱码 在文件中所看到的字符串是系统把内存中的数据转换成二进制数再解码成一些字符最后显示,就是当你双击打开一个文本文件时系统会把内存的数码信息读取显示出来,当你保存一个文本文件时系统会把这个文件以你所设置的编码方式编码,再放…

chatgpt赋能python:Python转码详解:解决乱码问题

Python转码详解:解决乱码问题 在使用Python进行编程的过程中,经常会遇到乱码的问题。这种情况往往发生在不同操作系统和应用程序之间交互数据时。本文将介绍Python如何进行转码以解决乱码问题。 什么是转码? 当我们将文本从一个编码格式转…

QMessageBox显示中文为乱码

如图,想要输出这些信息,但是展示为乱码 解决办法: 在cpp文件的最顶端加上#pragma execution_character_set("utf-8"),然后重新构建并运行就可以啦!

php echo 输出中文乱码

在php文件中&#xff0c;大家可能经常这样用echo "<script charsetutf-8 typetext/javascript>alert(请输入正确的手机号码);window.location.href/index;</script>"; 结果“请输入正确的手机号码”显示出来的是乱码。 这里提供一种解决办法。 在这句语句…

处理中文乱码和中文部分乱码

文章转自&#xff1a;http://book.51cto.com/art/201112/306309.htm 在网络操作中&#xff0c;关于中文乱码很多初学者都感到非常困难&#xff0c;如何解决乱码&#xff1f;不要没有目的胡乱转码&#xff0c;笔者访问了几个初学者&#xff0c;他们对于这个问题常用的方法就是一…

Qt中文乱码解决办法

目录 一、解决方法&#xff1a;1. QT4版本2. QT5版本 二、QString 为什么会乱码呢三、tr的使用 一、解决方法&#xff1a; 1. QT4版本 中文乱码解决办法是在main.cpp文件加入&#xff1a; #include <QTextCodec> int main(int argc, char **argv) {......// 以下部分解…

PHP界面显示中文乱码

在写一个表单提交的项目中&#xff0c;遇到了PHP界面输出无法显示中文界面。 后来查阅相关资料&#xff0c;得出解决途径。 代码如下&#xff1a; <!DOCTYPE html> <html> <head> <title>123</title> </head> <body><?php he…

中文乱码问题

解决中文乱码问题&#xff0c;出现于解压后中文文件名&#xff0c;中文应用程序即exe 常见的中文乱码及解决一. zip压缩包解压之后中文文件名称乱码1. 系统区域改成中文简体2. 用winar打开的时候&#xff0c;选择名称加密&#xff1a;简体中文 二. 中文应用程序&#xff08;以.…