今天开发帮忙写了一个读取windows文件签名的小程序,并把签名信息写到txt文件中,用UE打开发现居然是UCS-2 LE编码,几经查找,如下是读取的文本。
>>> a
'\xff\xfe.\x00/\x00\\\x002\x000\x001\x006\x000\x009\x002\x003\x00\\\x00C\x00W\x0
0C\x00C\x00S\x00e\x00t\x00u\x00p\x00.\x00e\x00x\x00e\x00-\x00-\x00-\x00S\x00i\x0
0g\x00n\x00a\x00t\x00u\x00r\x00e\x00N\x00a\x00m\x00e\x00:\x00\r\x00\n'
>>> chardet.detect(a)
{'confidence': 1.0, 'encoding': 'UTF-16LE'}
用python解析:
# -*- coding: cp936 -*-
import os
import codecs
def parseFile(filepath):
lineList = [] # 存放每一行的内容
with open(filepath, 'r') as fp:
line = fp.read()
if line.startswith('\xff\xfe'):
encoding = 'utf-16-le'
fp2 = codecs.open(filepath, 'r', encoding)
lineList = fp2.readlines()
fp2.stream.close()
for i in lineList: # 打印每一行
print i,
except Exception,ex:
print '[ERROR]--',ex
if __name__ == '__main__':
filepath = './Signature.txt'
parseFile(filepath)
今天开发帮忙写了一个读取windows文件签名的小程序,并把签名信息写到txt文件中,用UE打开发现居然是UCS-2 LE编码,几经查找,如下是读取的文本。>>> a'\xff\xfe.\x00/\x00\\\x002\x000\x001\x006\x000\x009\x002\x003\x00\\\x00C\x00W\x00C\x00C\x00S\x00e\x00t\x00...
报错如下:
UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 3298-3298:
Non-BMP character not supported in Tk
翻译一下就是:
Unicode编码错误:'UCS-2’编码器不能编码在3298-3298这个位置的字符类:
Non-BMP 字符类在Tk中不被支持。
大致就是这么个意思,翻译的不一定准,但是大致意思就是某行代码让编译器出现了问题,不能编译了。
一个字符(byte)有8个二进制位(bit),每一位都是0或1,最多表示256个符号
ASCII码一共规定了128个字符的编码,即第一位为0,后7位来表示这128个符号
包括32个不能打印出来的控制符号和键盘上的96个字符
绿色(52):26个英文字符的大小写格式
红色(44):每个按键都有两种符号,例如1和!
蓝色(2):空格和退格
Base64
把一串二进制转换成另一种二进制串
把每三个8Bit的字节转换为四个6Bit(38=46=24),然后把6Bit再添两位高位0,组成四个
折腾了好久,终于搞定了。参考链接:python使用codecs模块进行文件操作-读写中英文字符 - CSDN博客 http://blog.csdn.net/chenyxh2005/article/details/72465758#t0代码:import os
import codecs
path = 'D:\\yangnian\\Project\\Test\\motor_control'#tx
以下是本人从网上找的,旨在让程序员能真正掌握编码以及解决相关的问题谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode...