ansi编码_了解字符编码,不再恐惧文件乱码
背景:
工作上,不同部门经常需要共享文件,偶尔会出现打开文件出现的是一堆乱码,这时候很多人的第一反应是恐惧,认为是数据传输出现错误问题,要求发送方再重新传输一份。其实主要都是字符编码不一致的原因,只要了解字符编码原理,自己做好编码转化,一般都能快速恢复正常阅读。
目标:
了解字符编码
不再恐惧文件乱码
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. 根据前面的介绍,对于字符编码方案的演变,我们大致上可简单地划分为三个阶段: ① ASCII编码方案阶段 → ② ANSI编码方案阶段 → ③ ...
- php 删除mysql 返回_php 返回mysql字符编码与删除字符编码
php 返回mysql字符编码与删除字符编码 function Ebak_GetSetChar($char){ global $empire; if(empty($char)) { return '' ...
- mysql外码内码定义_刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系...
简体汉字编码中区位码.国标码.内码.外码.字形码的区别及关系 GB2312.GBK.GB18030等GB类汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码.外码.字形码又是什么意思 ...
- varchar汉字占几个字符_常用字符编码介绍
在百度百科中,是这样定义的,字符编码(Character encoding)也叫字符码,是把中的为指定中某一(例如:模式..8位组或者),以便在中存储和通过的传递.实际上就就记住一句话,字符编码就是为 ...
- python字符编码讲解_python 字符编码讲解
ASCII控制字符 Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...
- java字符编码采用_JAVA字符编码三:Java应用中的编码问题
1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...
- java字符编码问题_JAVA字符编码系列三:Java应用中的编码问题
1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...
- python3默认的字符编码和文件编码_Python的字符编码之三个问题
看过很多关于Python字符编码的博客,或深或浅,总感觉有点云里雾里,今天这里我尝试用我的方式也来凑个热闹. 首先,我们要弄清楚几个问题,这个对我们后面的理解非常重要. 字节与字符 Python源代码 ...
- python基础2_3-字符编码发展史和字符编码转换
目录 1.发展史 2.转换 1.发展史 python解释器在加载 .py 文件中的代码时,会对内容进行编码(2.x默认ascii,3.x默认unicode) ASCII(American Standa ...
最新文章
- Java程序设计经典习题15道
- Eclipse插件工具
- Python写爬虫只需三步
- 牛顿迭代法(Newton's Method)
- golang的bytes.buffer
- java string blob_java String类型转换为Blob类型
- 向量、矩阵、张量知识
- Greenplum-概念篇
- hdu-acm steps 命运
- iis出现HTTP 错误 403.14 - Forbidden Web问题
- Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
- 使用AJAX时出现“Microsoft JScript 运行时错误: 'Sys' 未定义”提示的解决方法
- ecshop 自动售货 php,ecshop自动分成二次开发实例
- 基于51单片机的红外计数器proteus仿真 LCD1602显示原理图程序设计
- Python模拟登录淘宝
- 《此生未完成读书总结》
- 范美忠妻子:美忠是个好男人
- 银行相关术语及其翻译
- 利用程序设置你的国庆专属头像
- 3500字归纳总结:一名合格的软件测试工程师需要掌握的技能大全