背景:

工作上,不同部门经常需要共享文件,偶尔会出现打开文件出现的是一堆乱码,这时候很多人的第一反应是恐惧,认为是数据传输出现错误问题,要求发送方再重新传输一份。其实主要都是字符编码不一致的原因,只要了解字符编码原理,自己做好编码转化,一般都能快速恢复正常阅读。

目标:

了解字符编码

不再恐惧文件乱码

1 常见乱码现象

1.1 txt文件用UE打开是乱码

1.2 csv文件用打开Excel打开是乱码

1.3 命令行读取文件是乱码

2 常见字符编码类型

2.1 字符编码ANSI和ASCII区别、Unicode和UTF-8区别

这篇文章解释很清晰:字符编码ANSI和ASCII区别、Unicode和UTF-8区别

2.2 概括

总结起来就是,之所以有这么多编码,都是为了实现兼容和效率的平衡,兼容性越高的编码就需要牺牲越大的存储空间。

ASCII:最简单的编码,不能解析中文

ANSI:ASCII的扩展,可以解析中文,兼容差,效率高

Unicode:ANSI的扩展,兼容强,效率低

UTF8:Unicode的扩展,通用

2.3 常用工具打开文件的解析方式

最常用接触就是ANSI和UTF8两种编码

ANSI:Windows,DOS,记事本,UltraEdit,Excel,Oracle

UTF8:Linux,Hadoop,Python、记事本

其中记事本可以自动解析ANSI和UTF8。

如果我们在Windows打开文件出现乱码,一般都是因为文件是UTF8编码,用记事本打开就可以正常显示,把文件另存为ANSI编码,就可以用其他工具正常打开。

反过来,传到服务器端后台打开是乱码,一般是服务器默认解析UTF8编码,把文件转为UTF8编码就可以正常读取。

3 Windows转码

3.1 记事本转换

用记事本打开文件,另存为,编码,一般选ANSI或UTF-8。

3.2 CMD转换

调用PowerShell的get-content、set-content命令

PowerShell -Command "& {get-content test1.txt -encoding Default | set-content test2.txt -encoding UTF8}"

4 Linux转码

调用iconv命令,

iconv -c -f ansi -t utf-8 test1.txt > test2.txt

5 Python转码

5.1 解析文件

with open('test1.txt','r',encoding='ANSI') as f:

content_str=f.read()

5.2 将ANSI转为utf-8

with open('test2.txt','w',encoding='utf-8') as f:

f.write(content_str)

5.3 自动转码函数

#chardet.detect有自动判断文件的编码类型功能

import chardet

def convert(path,out_enc='utf-8'):

#解码

with open(path,'rb') as f:

content_bytes=f.read()

source_encoding=chardet.detect(content_bytes).get('encoding')

print(source_encoding)

#读取文本

with open(path,'r',encoding=source_encoding) as f:

content_str=f.read()

#保存文本

with open(path,'w',encoding=out_enc) as f:

f.write(content_str)

print(out_enc)

ansi编码_了解字符编码,不再恐惧文件乱码相关推荐

  1. 【转】刨根究底字符编码之九——字符编码方案的演变与字节序

    字符编码方案的演变与字节序 一.字符编码方案的演变 1. 根据前面的介绍,对于字符编码方案的演变,我们大致上可简单地划分为三个阶段: ① ASCII编码方案阶段 → ② ANSI编码方案阶段 → ③ ...

  2. php 删除mysql 返回_php 返回mysql字符编码与删除字符编码

    php 返回mysql字符编码与删除字符编码 function Ebak_GetSetChar($char){ global $empire; if(empty($char)) { return '' ...

  3. mysql外码内码定义_刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系...

    简体汉字编码中区位码.国标码.内码.外码.字形码的区别及关系 GB2312.GBK.GB18030等GB类汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码.外码.字形码又是什么意思 ...

  4. varchar汉字占几个字符_常用字符编码介绍

    在百度百科中,是这样定义的,字符编码(Character encoding)也叫字符码,是把中的为指定中某一(例如:模式..8位组或者),以便在中存储和通过的传递.实际上就就记住一句话,字符编码就是为 ...

  5. python字符编码讲解_python 字符编码讲解

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  6. java字符编码采用_JAVA字符编码三:Java应用中的编码问题

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  7. java字符编码问题_JAVA字符编码系列三:Java应用中的编码问题

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  8. python3默认的字符编码和文件编码_Python的字符编码之三个问题

    看过很多关于Python字符编码的博客,或深或浅,总感觉有点云里雾里,今天这里我尝试用我的方式也来凑个热闹. 首先,我们要弄清楚几个问题,这个对我们后面的理解非常重要. 字节与字符 Python源代码 ...

  9. python基础2_3-字符编码发展史和字符编码转换

    目录 1.发展史 2.转换 1.发展史 python解释器在加载 .py 文件中的代码时,会对内容进行编码(2.x默认ascii,3.x默认unicode) ASCII(American Standa ...

最新文章

  1. Java程序设计经典习题15道
  2. Eclipse插件工具
  3. Python写爬虫只需三步
  4. 牛顿迭代法(Newton's Method)
  5. golang的bytes.buffer
  6. java string blob_java String类型转换为Blob类型
  7. 向量、矩阵、张量知识
  8. Greenplum-概念篇
  9. hdu-acm steps 命运
  10. iis出现HTTP 错误 403.14 - Forbidden Web问题
  11. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
  12. 使用AJAX时出现“Microsoft JScript 运行时错误: 'Sys' 未定义”提示的解决方法
  13. ecshop 自动售货 php,ecshop自动分成二次开发实例
  14. 基于51单片机的红外计数器proteus仿真 LCD1602显示原理图程序设计
  15. Python模拟登录淘宝
  16. 《此生未完成读书总结》
  17. 范美忠妻子:美忠是个好男人
  18. 银行相关术语及其翻译
  19. 利用程序设置你的国庆专属头像
  20. 3500字归纳总结:一名合格的软件测试工程师需要掌握的技能大全

热门文章

  1. (十)数据结构之“堆”
  2. ElementUI分页组件的封装
  3. vue全局使用electron
  4. shell脚本判断linux系统,并判断该系统版本号,从而关闭防火墙
  5. Vue.JS项目输入框中使用v-model导致number类型值自动转换成string问题的解决方案
  6. 人工机器:jetbot小车密码
  7. OpenCV的Python接口
  8. 专业程序员必知必会技巧:驯服复杂代码
  9. VTK+MFC 系列教程 非常强大
  10. 支付系统整体设计:整体架构设计以及注意要点(一)