#!/bin/bash

convert_file()
{
    for file in `find .`
    do
        if [[ -f $file ]]
        then
            if [[ ${file##*.} == lua || ${file##*.} == ini ]]; then
                cp $file $file".bak"
                iconv -f GB2312 -t UTF-8 $file > $file
                echo $file
            fi
        fi
    done
}

convert_file

一、乱码


率先,全体消息在微型计算机上都以以二进制花样积攒。而当出现乱码的时候屡次是将那几个音信以字符的款式展现之后。那是因为用的编码和平化解码的章程不等同。
比如:
写2个本子批量调换项目中GB231二编码的文本为UTF,编码翻译。当大家将“祝福”输入Computer时。暗许是以GB231二作为字符编码实行编码,将汉字编码成贰进制存款和储蓄在Computer中,当大家再一次读取时,若选用UTF-八字符编码来解码输出,就会促成乱码。
就像:
当法国人将“祝福”写在纸上时。私下认可是以英文来编码,将“祝福”的意味编码成bless。当三个匈牙利人读取时,会由此希腊语来解码那几个单词的意思,在意大利语中,bless便是“受伤”的情致。就会导致明白错误,而当借使罗马尼亚语若是未有这么些单词,就会翻译出错,出现乱码。

编码,编码翻译

#__coding:utf-8__

#__coding:utf-8__…

00柒编码解码,007编码

python叁暗中同意编码是utf-8
#gbk    decode变成unicode
#unicode    encode能够改为gbk,还会把数据转成bytes类型
s=”特斯拉”
s_to_unicode=s.decode(“utf-8”)   #宣示原来是哪些格式的
unicode_to_gbk=s_to_unicode.encode(“gbk”)   
#编码成你想要的编码格式

python②和python叁,五个让本人有点懵

看这几个代码感到比较清楚一点

澳门金沙国际 1

1 s = "特斯拉"
2 s_unicode = s.encode("utf-8")
3 print(s_unicode)
4 print(s_unicode.decode())

View Code

 

python3私下认可编码是utf-八 #gbk
decode变成unicode #unicode encode能够成为gbk,还会把多少转成bytes类型
s=”特斯拉” s_to_unicode=s.deco…

二、字符集


字符集是1个平整的集纳。就例如上述的俄语,中文,乌克兰(Ukraine)语。
对此三个字符集来讲,准确编码转码三个字符要求八个关键要素:字库表(character
repertoire)、编码字符集(coded character set)、字符编码(character
encoding form)

其中字库表约等于四个具有字符的数据库。编码字符集(编码用的字符集)用来表示二个字符在字库中的位置。字符编码(字符的编码)代表将编码字符集转化为实际存款和储蓄的数值。

一般的话,会直接将编码字符集的值作为编码后的值直接存款和储蓄。举个例子ASCLL中A的职位是6八位,编码后的A的数值是0100 0001,即10进制的陆5转折为二进制。

</br>
看来此间,也许有人会纳闷:既然每一个字符都有友好的号码(编码字符集),那直接存储就好了哟,为啥还要字符编码呢?

其实原因也相比好了解,unicode的产出是为了统一字库表,能够涵盖世界上全体的字符,但实在选拔进程中会发现真正用的上的字符相对整个字库表来说比例相当低。例如粤语地区的先后大概不会需求拉脱维亚语字符,而有个别拉脱维亚语国家以至轻巧的ASCII字库表就能满意基本须要。而一旦把每一个字符都用字库表中的序号来存款和储蓄的话,各类字符就必要2个字节(那里以Unicode字库为例),那样对于原来用仅占二个字符的ASCII编码的塞尔维亚(Република Србија)语地区国家强烈是三个额外费用(存储体量是原先的三倍)。算的直接一些,同样壹块硬盘,用ASCII能够存1500篇文章,而用3字节Unicode序号存款和储蓄只可以存500篇。于是就应运而生了UTF-八那样的变长编码。在UTF-八编码中原本只要求3个字节的ASCII字符,依然只占3个字节。而像中文及塞尔维亚语那样的复杂性字符就要求三个到二个字节来储存。

UTF-8和Unicode的关系
看完下面的分解,那么对于UTF-八和Unicode的涉嫌就相比较好精晓了。unicode便是上面的编码字符集,而utf-8正是字符编码。也足以驾驭为unicode是字符在字Curry的岗位,或许unicode代表全部字库。
unicode差不离囊括了具有国家的只怕出现的全数字符。Unicode的数码从0000初步从来到10FFFF共分为1两个Plane,每一个Plane中有655三18个字符。而UTF-捌则只兑现了第三个Plane,可知UTF-八就算是二个现行反革命接受度最广的字符集编码,可是它并未包蕴全数Unicode的字库,那也促成了它在有些场景下对于特殊字符的管理困难。

UTF-8编码简要介绍
为了越来越好的知道前边的实际上选取,大家那边大概的介绍下UTF-八的编码达成方式。即UTF-8的轮廓存款和储蓄和Unicode序号的调换关系。
UTF-8编码为变长编码。最作者码单位(code
unit)为二个字节。一个字节的前一-1个bit为描述性部分,前边为实际序号部分。
一、假诺2个字节的首先位为0,那么代表当前字符为单字节字符,占用二个字节的空间。0之后的富有片段(玖个bit)代表在Unicode中的序号。
二、假如贰个字节以1拾初阶,那么代表当前字符为双字节字符,占用二个字节的上空。1拾现在的具有片段(七个bit)代表在Unicode中的序号。且第二个字节以拾上马
三、假设二个字节以1110初始,那么代表当前字符为叁字节字符,占用三个字节的空间。110今后的有所片段(三个bit)代表在Unicode中的序号。且第贰、第二个字节以十起来
4、假诺四个字节以十方始,那么代表当前字节为多字节字符的第2个字节。十自此的享有片段(伍个bit)代表在Unicode中的序号。
切实每种字节的性状可知下表,其间x代表序号部分,把种种字节中的全数x部分拼接在协同就构成了在Unicode字库中的序号

澳门金沙国际 2

UTF编码

举例说“汉”字的Unicode编码是6C4玖。六C4九在0800-FFFF之间,所以肯定要用3字节模板了:11拾xxxx
十xxxxxx 10xxxxxx。将六C4玖写成2进制是:0110 11000100100一,用那些比特流依次取代模板中的x,得到:11拾01十 十1一千1
10001001,即E陆 B一 8九。

里头iso
885玖-壹,gb2312,gbk,gb18030,big伍,unicode等都以编码字符集和字符编码1致的字符集,当中,unicode还有少数种字符编码,比方UTF-八,UTF-1陆等等。

<br />

三、乱码化解


依赖上诉内容,能够精晓半数以上的乱码都以由解码编码不联合引起的(iso885玖-一解码普通话也会乱码),那我们怎么化解吗?
实际只要分析种种须要解码的进程,1一分析就足以驾驭了。以web应用为例:
首先在jsp上边有1行不能缺少的代码<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
pageEncoding是jsp文件本人的编码
澳门金沙国际 ,contentType的charset是指服务器发送给客户端时的情节编码

JSP要经过一遍的“编码”,第1阶段会用pageEncoding,第三品级会用utf-八至utf-八,第3等级正是由汤姆cat出来的网页,
用的是contentType。

先是阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由钦赐的编码方案翻译成统一的UTF-八JAVA源码(即.java),假如pageEncoding设定错了,或尚未设定,出来的就是中文乱码。

其次等级是由JAVAC的JAVA源码至java
byteCode的编写翻译,不论JSP编写时候用的是怎样编码方案,经过这一个阶段的结果1切是UTF-8的encoding的java源码。

JAVAC用UTF-八的encoding读取java源码,编写翻译成UTF-捌encoding的2进制码(即.class),那是JVM对常数字串在二进制码(java
encoding)内发挥的标准。

其3品级是汤姆cat(或其的application
container)载入和实践阶段二的来的JAVA二进制码,输出的结果,也正是在客户端来看的,那时隐藏在等级1和阶段2的参数contentType就发挥了意义

参考文献:
Notepad++的三种编码辅助
编写翻译.java文件时的编码难题
【笔面试】字符流和字节流的界别以及如何减轻乱码难点
jsp中的contentType与pageEncoding的分别和成效
汉字编码调换原理及办法

四、Notepad++


而像Notepad++等软件,有三种意义

澳门金沙国际 3

Notepad++

以XXX格式编码是改动编码字符集,意味着在微型计算机中存款和储蓄的值是不改变的
转为XXX格式编码是退换编码格式,意味着都是同一个字符集,改造的是编码格局,比方UTF-8转UTF-1陆

utf8mb四得以放表情,六个字节
utf8_bin将字符串中的每1个字符用贰进制数据存款和储蓄,区分轻重缓急写。

utf8_genera_ci不区分大小写,ci为case
insensitive的缩写,即大小写不灵动。

utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。

相关文章