首先声明这篇学习记录是基于python3的。
  python3中,py文件中默认的文件编码就是unicode,不用像python2中那样加u,比如u'中文'。
  不过在涉及路径时,比如C:\Users\Administrator\Desktop\StudyNote\Python,还是要加r。
  eg:r'C:\Users\Administrator\Desktop\StudyNote\Python'。
  因为\是转义符,想输出'\'得写成'\\'才可以。加了r就可以让python自动处理字符串,不让'\'进行转义,因此最终的字符串就是C:\Users\Administrator\Desktop\StudyNote\Python的意思。

  OK,继续讲。
  首先要明确一点,你的py文件用什么文件编码不重要,都可以顺利执行。不过要保证一点,保存py文件时的编码必须与编码声明的一样。假设你的py文件开头有以下编码声明:
  eg: # -*- coding: utf-8 -*-
  那么保存py文件时的编码也要为utf-8。
  另外再普及一下保存文件编码时的知识,用notepad++在选择编码模式的时候,有utf-8和utf-8 without BOM,这个BOM实际上是在文件开头加注了三个字符,用以表明本文件的编码方式为utf-8,但这个是不需要的,往往会导致读取文件的时候出错(因为多了三个字符嘛,如果要去掉的话还得[3:]一下,挺麻烦的)。所以我们一般用utf-8 without BOM.

  再言归正传。我们在处理文本文件的时候,如果该文件是unicode编码,则不需要做任何的处理操作,直接用'r'参数读取直接可用
  eg:

  f=open('文件路径','r')
  f_read=f.read()
  print(f_read)

  这样就能完整的输出文件里的字符串。
  如果不是unicode编码,就不能直接用了,直接读会出现乱码。只能先以'rb'参数读取二进制文件的方式读取进来,read之后再解码
  eg:

f=open('文件路径','rb')
f_read=f.read()
f_read_decode=f_read.decode('该文件的编码方式')
print(f_read_decode)

  这样才能完整显示,不然会有乱码出现。

  问题又来了,往往我们并不知道该文件的编码方式,这该怎么办?
  幸好python有个强大的工具chardet
  eg:

import chardet
f=open('文件路径','rb')
f_read=f.read()
f_charInfo=chardet.detect(f_read)
f_charInfo的输出是这样的的一个字典{'confidence': 0.99, 'encoding': 'utf-8'}

  前面‘confidence’是置信概率,后面是推断出的编码方式。以上的结果,意思为推断这段字符串的编码方式为'utf-8'的概率为99%.
  经过我的测试,如果文件里的字符串比较少的话,chardet模块是比较难判断出正确的编码模式的,体现在置信概率比较小,字符串多的话,概率会大。我觉得至少大于90%才可信。
  得到编码方式后,就可以用来解码了。
  f_read_decode=f_read.decode(f_charInfo['encoding'])
  print(f_read_decode)

  最后补充一下chardet的安装方法:
  pip install chardet
  pip的安装方法请自行百度。

利用Python从文件中读取字符串(解决乱码问题)的更多相关文章

  1. Python从文件中读取字符串,用正则表达式匹配中文字符的问题

    2013-07-27 21:01:37|           在Windows下,用Python从.txt文件中读取字符串,并用正则表达式匹配中文,在网上看了方法,用的时候发现中文没有被匹配.     ...

  2. Python从文件中读取数据

    一.读取整个文件内容 在读取文件之前,我们先创建一个文本文件resource.txt作为源文件. resource.txt my name is joker, I am 18 years old, H ...

  3. Python从文件中读取数据(2)

    一.读取文件中各行的内容并存储到一个列表中 继续用resource.txt 举例 resource.txt my name is joker, I am 18 years old, How about ...

  4. Python从文件中读取内容,包含中文和英文

    读取文件内容使要和保存文件时的格式一致 以UTF-8格式保存文件,如: 读取: 在.py起始行写入:#-*- coding:utf-8 -*- filename = raw_input(u" ...

  5. Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】

    ———————————————————————————————————————————从文件中读写字符串(直接读写/通过NSURL读写) #import <Foundation/Foundati ...

  6. 利用PushbackReader读取文件中某个字符串之前的内容

    package File; import java.io.FileReader; import java.io.IOException; import java.io.PushbackReader; ...

  7. c++ 读取不了hdf5文件中的字符串

    问题描述: 在拿到一个hdf5文件,想用c++去读取文件中的字符串,但是会报错:read failed ps: c++读取hdf5的字符串方法见:https://support.hdfgroup.or ...

  8. 新手C#s.Split(),s.Substring(,)以及读取txt文件中的字符串的学习2018.08.05

    s.split()用于字符串分割,具有多种重载方法,可以通过指定字符或字符串分割原字符串成为字符串数组. //s.Split()用于分割字符串为字符串数组,StringSplitOptions.Rem ...

  9. 【Python】从文件中读取数据

    从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...

随机推荐

  1. 数组Array和字符串String的indexOf方法,以及ES7(ES2016)中新增的Array.prototype.includes方法

    前言 我们在判断某一个字符是否存在于一个字符串中或者某一个值是否存在于一个数组中时,ES7之前我们需要使用indexOf,ES7引入了新的方法includes 语法 数组:Array.inexOf(s ...

  2. SPOJ BALNUM Balanced Numbers 平衡数(数位DP,状压)

    题意: 平衡树定义为“一个整数的某个数位若是奇数,则该奇数必定出现偶数次:偶数位则必须出现奇数次”,比如 222,数位为偶数2,共出现3次,是奇数次,所以合法.给一个区间[L,R],问有多少个平衡数? ...

  3. Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ?

    Page_Load与sender -- PostBack是由哪个 ASP.NET控件引起 ? 之前有讨论过ASP.NET Web Form "事件"里面的 "sender ...

  4. 【UML】协作图Collaboration diagram(交互图)(转)

    http://blog.csdn.net/sds15732622190/article/details/49402269 前言         学完UML时序图,就要看一下UML协作图,因为两张图是相 ...

  5. Ecshop首页购物车数量调取问题

    在page_header.lbi中调用SQL: <?php $sql = 'SELECT SUM(goods_number) AS number' . ' FROM ' . $GLOBALS[' ...

  6. 2018.4.15 Mac系统下如何使用StartUml画好需求分析的类图 (同样适用于windows)

    Mac如何使用StartUml (同样适用于windows) 左侧边栏的英文含义及其用法 关联(Association) [关联关系]:是一种拥有的关系,它使一个类知道另一个类的属性和方法:如:老师与 ...

  7. pysql用类进行封装

    pyMySQL用类进行封装 class SqlHelper(object): def __init__(self): self.connect() def connect(self): self.co ...

  8. 如何将oracle查询的结果传输给变量

    如何将oracle查询的结果传输给变量 1. sqlplus查询时的变量设置 set echo off; #控制start命令不列出命令文件中的每一命令 set feedback off; #显示由查 ...

  9. 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字

    静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...

  10. cocos2dx 单张图片加密

    cocos2dx 已经封装好读取加密的prv文件的方法,打开texturepacker,导入一张图片,在content protection中写入密钥,在texture format中选择prv格式 ...