Python 为什么第一行更长?
我正在使用python阅读txt文档,其中包含: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
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,别担心,该网站邀请您编写复杂的无意义代码(自己检查第一个字符)。看看我的答案。