Python 为什么第一行更长?

Python 为什么第一行更长?,python,text-files,Python,Text Files,我正在使用python阅读txt文档,其中包含: f = open(path,"r") for line in f: line = line.decode('utf8').strip() length = len(line) firstLetter = line[:1] 这似乎可行,但第一行的长度总是比第一行长。。。一, 例如: 第一行是“XXXX”,其中X表示一个汉字 那么长度将是5,但不是4 第一个字母就什么都不是了 但当它进入第二行和第二行之后,它工作正常 tks

我正在使用python阅读txt文档,其中包含:

f = open(path,"r")
for line in f:
    line = line.decode('utf8').strip()
    length = len(line)
    firstLetter = line[:1]
这似乎可行,但第一行的长度总是比第一行长。。。一,

例如: 第一行是“XXXX”,其中X表示一个汉字 那么长度将是5,但不是4 第一个字母就什么都不是了

但当它进入第二行和第二行之后,它工作正常


tks ~

您可能会在第一行的第一个字符处获得


关于如何处理它的信息是

您可能会在第一行的第一个字符处看到


有关如何处理它的信息在文件开头有一个UTF-8 BOM。不要吹毛求疵地检查第一个字符。不要使用
utf8
编码,而是与
codecs.open()
您的字节字符串.decode()一起使用。。。如果BOM表存在,而您在代码中看不到它,则会将其吸走

>>> bom8 = u'\ufeff'.encode('utf8')
>>> bom8
'\xef\xbb\xbf'
>>> bom8.decode('utf8')
u'\ufeff'
>>> bom8.decode('utf_8_sig')
u'' # removes the BOM
>>> 'abcd'.decode('utf_8_sig')
u'abcd' # doesn't care if no BOM
>>>

文件开头有一个UTF-8 BOM表。不要吹毛求疵地检查第一个字符。不要使用
utf8
编码,而是与
codecs.open()
您的字节字符串.decode()一起使用。。。如果BOM表存在,而您在代码中看不到它,则会将其吸走

>>> bom8 = u'\ufeff'.encode('utf8')
>>> bom8
'\xef\xbb\xbf'
>>> bom8.decode('utf8')
u'\ufeff'
>>> bom8.decode('utf_8_sig')
u'' # removes the BOM
>>> 'abcd'.decode('utf_8_sig')
u'abcd' # doesn't care if no BOM
>>>

什么是第一个字母?上面写着65279,那是什么?这不是一个正常的字符,而是BOM(实际上是一个零宽度的无中断空格),正如下面的答案所说。它看起来什么都没有,因为它是一个非打印字符。你是说我必须自己删除它?如果是这样的话,判断它是否是第一行会不会花费更多?什么是
ord(firstLetter)
get you?上面写着65279,那是什么?这不是一个正常的字符,而是BOM(实际上是一个零宽度的无中断空格),正如下面的答案所说。它看起来什么都没有,因为它是一个非打印字符。你是说我必须自己删除它?如果是这样的话,判断它是否是第一行会不会花费更多?对不起,我在中国,所以我无法打开那个网站。我在谷歌搜索过,它说EditPlus在utf8文件中添加了一个BOM表。因此,我将设置更改为“始终删除签名”,但没有更改work@MangMang,别担心,该网站邀请您编写复杂的无意义代码(自己检查第一个字符)。看到我的答案了。很抱歉,我在中国,所以我无法打开那个网站。我在谷歌搜索过,上面说EditPlus在utf8文件中添加了一个BOM表。因此,我将设置更改为“始终删除签名”,但没有更改work@MangMang,别担心,该网站邀请您编写复杂的无意义代码(自己检查第一个字符)。看看我的答案。