字符乱码之字符集和字符编码

最近经常会碰到上传客户提供的历史数据上传时csv文件用Excel打开时会有乱码问题,虽然知道知道是字符编码不一致导致的,但其中诸多细节却知之甚少,今日特来理理。

1.为什么会有字符乱码问题?如何解决字符乱码问题

计算机中存储的信息都是二进制数表示的,但是世界上有各种不同的语言文字,所以我们需要一些规则将各种字符转换成二进制后存储在计算机中 即编码,以及如果将存储在计算机中的二进制数解析出来即解码。就如破译电报密码一样如果密码本是错误的,那么密码也是错误。会有字符乱码问题就是因为解码方式是不对的,要解决乱码问题一定要知道字符编码是什么

扫盲知识点:

字符集(Charset):是一个系统支持的所有抽象字符的集合,字符是各种文字和符号的总称,包括各种国家文字,标点符号,图形符号,数字

字库表:它存储了编码规范中的所有字符,计算机通过计算机就是根据二进制数从字库表中找到字符然后显示给用户滴,相当于一个存储字符的数据库

字符集和字库表一一对应,相互转换,这是电脑识别字符的关键

字符编码(Charater Encoding):是一套法则,使字符集中的自然语言字符(字符集)转换成计算集可以接受的数字代码。

字符解码:二进制数从字库表中找到字符然后显示给用户

字符集和字符编码的关系:

字符集其实是一套编码规范中的子概念,为了显示字符,世界组织就制定了编码规范,使用不同的二进制数来表示代表不同的字符,这样电脑就可以根据二进制数来显示其对应的字符。我们通常用编码规范的名字来称呼对应的字符集

2.有哪些常见的字符编码?

一个字节(Byte)有8位(bit), 一个字符在不同的编码中所占的字节是不一定的,比如一个汉字在GBK编码中占两个字节,但是在UTGF-8 中占3个字节

3.Accept-Charset/Accept-Encoding/Accept-Language/Content-Type/Content-Encoding/Content-Language

在HTTP中,与字符集和字符编码相关的消息头是Accept-Charset/Content-Type,另外主区区分Accept-Charset/Accept-Encoding/Accept-Language/Content-Type/Content-Encoding/Content-Language:

Accept-Charset:浏览器申明自己接收的字符集,这就是本文前面介绍的各种字符集和字符编码,如gb2312,utf-8(通常我们说Charset包括了相应的字符编码方案);

Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);

Accept-Language:浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;

Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集。例如:Content-Type: text/html; charset=’gb2312’

Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。例如:Content-Encoding:gzip

Content-Language:WEB服务器告诉浏览器自己响应的对象的语言。

抄录总结自:https://blog.csdn.net/qq_42068856/article/details/83792174

https://blog.csdn.net/xuebing1995/article/details/78714540

https://www.cnblogs.com/happyday56/p/4135845.html

原文地址:https://www.cnblogs.com/Spring-Rain/p/10772302.html

时间: 2024-10-07 02:34:38

字符乱码之字符集和字符编码的相关文章

12.30 字符集和字符编码(Charset & Encoding)(转载)

——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创想! 相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"б?ЯАзЪСЯ"."?????????"?还记得HTTP中的Accept-Charset.Accept-Encoding.Accept-Language.Content-Encoding.Content-Language等消息头字段?这些就是接下来我们要探讨的. 目录: 1.基础知识 2.常用字符集和字符编码 2.1. ASCII字符

字符集和字符编码

1. 概述 现在的编程语言对字符串的处理一般封装比较好,所以平时编写代码,很少要自己考虑字符编码问题.以前学习xml时,由于xml的存储涉及到编码格式,查过一些资料,知道一些概念,GB2312.Unicode.Utf-8.Utf-16.UCS-2等,但这些概念之间什么关系,仍然一知半解.最近要做国际化,需要把不支持Unicode的程序升级为Unicode,借着这个机会,把其中的知识梳理了一遍,对字符编码的理解算更系统化了,在此总结一下. 2. 字符集和字符编码 首先明确两个概念,"字符集&quo

字符集和字符编码(Charset & Encoding)

相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"б?ЯАзЪСЯ"."?????????"?还记得HTTP中的Accept-Charset.Accept-Encoding.Accept-Language.Content-Encoding.Content-Language等消息头字段?这些就是接下来我们要探讨的. 目录: 1.基础知识 2.常用字符集和字符编码 2.1. ASCII字符集&编码 2.2. GBXXXX字符集&编码 2.3. BI

十分钟搞清字符集和字符编码

本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧. 背景:字符集和编码无疑是IT菜鸟甚至是各种大神的头痛问题.当遇到纷繁复杂的字符集,各种火星文和乱码时,问题的定位往往变得非常困难.本文就将会从原理方面对字符集和编码做个简单的科普介绍,同时也会介绍一些通用的乱码故障定位的方法以方便读者以后能够更从容的定位相关问题.在正式介绍之前,先做个小申明:如果你希望非常精确的理解各个名词的解释,那么可以查阅wikipedia.本文是博主通过自己理解消化后并转化成易懂浅显的表述后的介绍.

(转)十分钟搞清字符集和字符编码

十分钟搞清字符集和字符编码 转载自: http://cenalulu.github.io/linux/character-encoding/作者: 卢钧轶 本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧 背景:字符集和编码无疑是IT菜鸟甚至是各种大神的头痛问题.当遇到纷繁复杂的字符集,各种火星文和乱码时,问题的定位往往变得非常困难. 本文就将会从原理方面对字符集和编码做个简单的科普介绍,同时也会介绍一些通用的乱码故障定位的方法以方便读者以后能够更从容的定位相关问题. 在正式

转:字符集和字符编码(Charset & Encoding)

转自:http://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html ——每个软件开发人员应该无条件掌握的知识! ——Unicode伟大的创想! 相信大家一定碰到过,打开某个网页,却显示一堆像乱码,如"б?ЯАзЪСЯ"."?????????"?还记得HTTP中的Accept-Charset.Accept-Encoding.Accept-Language.Content-Encoding.Content-L

搞清字符集和字符编码

本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧 背景:字符集和编码无疑是IT菜鸟甚至是各种大神的头痛问题.当遇到纷繁复杂的字符集,各种火星文和乱码时,问题的定位往往变得非常困难.本文就将会从原理方面对字符集和编码做个简单的科普介绍,同时也会介绍一些通用的乱码故障定位的方法以方便读者以后能够更从容的定位相关问题.在正式介绍之前,先做个小申明:如果你希望非常精确的理解各个名词的解释,那么可以查阅wikipedia.本文是博主通过自己理解消化后并转化成易懂浅显的表述后的介绍. 什

【转载】十分钟搞清字符集和字符编码

十分钟搞清字符集和字符编码 什么是字符集 什么是字符编码 UTF-8和Unicode的关系 UTF-8编码简介 为什么会出现乱码 如何识别乱码的本来想要表达的文字 常见问题处理之Emoji 本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧 背景:字符集和编码无疑是IT菜鸟甚至是各种大神的头痛问题.当遇到纷繁复杂的字符集,各种火星文和乱码时,问题的定位往往变得非常困难.本文就将会从原理方面对字符集和编码做个简单的科普介绍,同时也会介绍一些通用的乱码故障定位的方法以方便读者以后能

【转】十分钟搞清字符集和字符编码

本文将简述字符集,字符编码的概念.以及在遭遇乱码时的一些常用诊断技巧. 背景:字符集和编码无疑是IT菜鸟甚至是各种大神的头痛问题.当遇到纷繁复杂的字符集,各种火星文和乱码时,问题的定位往往变得非常困难.本文就将会从原理方面对字符集和编码做个简单的科普介绍,同时也会介绍一些通用的乱码故障定位的方法以方便读者以后能够更从容的定位相关问题.在正式介绍之前,先做个小申明:如果你希望非常精确的理解各个名词的解释,那么可以查阅wikipedia.本文是博主通过自己理解消化后并转化成易懂浅显的表述后的介绍.