首先声明这篇学习记录是基于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. node执行cmd命令方法

    var cmd='tasklist';//获取 子进程模块的exec方法,用于执行cmd命令var exec = require('child_process').exec; //运行 定义的cmd命 ...

  2. codeforce Gym 100342H Hard Test (思考题)

    题意:构造让Dijkstra单源最短路算法有效松弛次数最多的数据... 题解:构造,题意换种说法就是更新晚的路径要比更新早的路径短.因为所有点都会更新一次,那么按照更新时间形成一条链,即到最后一个点的 ...

  3. FMDB浅析(思想)

    http://www.cnblogs.com/OTgiraffe/p/5931800.html 一.FMDB介绍 FMDB是一种第三方的开源库,FMDB就是对SQLite的API进行了封装,加上了面向 ...

  4. oracle 数据导到 sql server

    方法一: navicate:用法比较简单,选择工具-数据传输就可以了.目前测试了下暂时没遇到什么问题. 方法二: Microsoft SQL Server Migration Assistant 8. ...

  5. JS实用技术

    JS外部引用其他文件(建议) <script src="myScript1.js"></script> JS输出显示方式 使用 window.alert() ...

  6. java从键盘输入三个整数,实现从小到大排序

    package study01; import java.util.Scanner; public class Sort { /** * 需求:由键盘输入三个整数分别存入变量a.b.c,对他们进行 排 ...

  7. iOS开发之蓝牙业务封装

    因为公司做智能家居开发,有很多蓝牙的智能硬件.因此项目中经常需要和蓝牙打交道.为此为了提高开发效率,就把蓝牙的公共业务进行了封装. 本文将对封装的思路做一个简单的阐述. 首先我们需要一个头文件.在这个 ...

  8. VueX源码分析(1)

    VueX源码分析(1) 文件架构如下 /module /plugins helpers.js index.esm.js index.js store.js util.js util.js 先从最简单的 ...

  9. 头文件string与string.h的区别

    在C++中,#include<iostream>与#include<iostream.h>的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态 ...

  10. 洛谷 P1147 连续自然数和

    洛谷 P1147 连续自然数和 看到dalao们的各种高深方法,本蒟蒻一个都没看懂... 于是,我来发一篇蒟蒻友好型的简单题解 #include<bits/stdc++.h> using ...