Почему первая строка длиннее? - PullRequest
1 голос
/ 08 апреля 2011

Я использую python для чтения текстового документа с:

f = open(path,"r")
for line in f:
    line = line.decode('utf8').strip()
    length = len(line)
    firstLetter = line[:1]

это работает, но длина первой строки всегда длиннее, например, на 1

: первая строка "XXXX", где X обозначает китайский символ, тогда длина будет 5, но не 4, а firstLetter будет ничем

, но когда он переходит ко второй и после строк, он работает правильно

ткс ~

Ответы [ 2 ]

5 голосов
/ 08 апреля 2011

В начале файла у вас есть спецификация UTF-8. Не волнуйтесь о проверке первого персонажа. Вместо кодировки utf8 используйте кодировку utf_8_sig с codecs.open() или your_byte_string.decode() ... это засасывает спецификацию, если она существует, и вы не видите ее в своем коде.

>>> 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
>>>
5 голосов
/ 08 апреля 2011

Вы, вероятно, получаете Порядок следования байтов (BOM) в качестве первого символа в первой строке.

Информация о работе с ним здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...