当我用codecs.open('f.txt', 'r', encoding=None)
打开一个文件时,python2.7.8选择了一些默认编码。在
是哪一个?这些记录在哪里?在
Some experimentation显示默认编码不是utf-8
、ascii
、sys.getdefaultencoding()
、locale.getpreferredencoding()
或{
编辑(阐明我的动机):我想知道当我运行这样一个脚本时,Python2.7.8选择了哪种编码:
f = codecs.open('f.txt', 'r', encoding=None) # or equivalently: f=open('f.txt')
for line in f:
print len(line) # obviously SOME encoding has been chosen if I can print the number of characters
我对猜测文件编码的其他方法不感兴趣。在
它基本上不会做任何透明的编码/解码-它只是打开文件并返回它。在
这是图书馆的代码:
如您所见,如果encoding为None,它只返回打开的文件。在
以下是您的文件,每个字节以十进制表示,并显示其相应的ascii字符:
^{pr2}$在ascii中打开它时遇到的问题是十进制值为180的字节。Ascii码最多只能达到127。所以这让我想到这一定是某种扩展的ascii,128-255用于额外的符号。在仔细阅读了wikipedia关于ascii(https://en.wikipedia.org/wiki/ASCII)的文章之后,它提到了一个流行的ascii扩展名windows-1252。在windows-1252中,十进制值180映射到锐音符(')。然后我决定搜索你文件中的字符串,看看它实际上与什么相关。这是我发现“哈佛杯30周年”http://www.365chess.com/tournaments/Harvard_Cup_30%C2%B4_1989/21650
所以在夏天,正确的编码方式可能是windows-1252。这是我的测试程序:
输出
当读取文件时,使用
codecs.open('f.txt','r',encoding=None)
返回字节字符串,而不是Unicode字符串。它根本不尝试用编码来解码文件数据。它相当于open('f.txt','r')
。接收到的长度是存储在文件中的行中的单个字节数,不进行转换。在一个小例子:
相关问题 更多 >
编程相关推荐