バグ修正
BOM3byte目の0xBFを判定するとき、UTF-8バイトシーケンスに含まれる0xBFを誤検知して、正しく末尾行が抽出できなかった
This commit is contained in:
parent
e27c4f1632
commit
ecbff882bf
@ -91,26 +91,14 @@ class VjskDataLoadManager:
|
||||
# memo: UTF-8 バイトシーケンスとして、b'\n' が全角文字の一部にはならない
|
||||
if char == b'\n':
|
||||
break
|
||||
# ファイル先頭のBOMを検出したらループ終了
|
||||
if char == b'\xbf':
|
||||
# ファイル先頭のBOM3byte目の BF を検出したらループ終了
|
||||
# memo: UTF-8 バイトシーケンスとして、b'\xbf' が全角文字の一部の可能性がある(例:全角片仮名の「タ」)
|
||||
# memo: charに代入したときのfile.read(1)によって、ファイルポインタは2→3になっている前提のロジック
|
||||
if char == b'\xbf' and file.tell() == 3:
|
||||
break
|
||||
last_line = file.readline().decode('utf-8-sig').rstrip('\n')
|
||||
buf_count = last_line.count('\t')
|
||||
|
||||
# # ファイルの末尾から2バイト手前に、シーク位置を移動
|
||||
# # memo: 1byte戻るだけだと、直後のread(1)で末尾行のLFを見てしまうので、-2移動
|
||||
# file.seek(-2, os.SEEK_END)
|
||||
# # 改行文字を見つけるまで逆方向に読み進める
|
||||
# # memo: read(1)することでシーク位置は1byte前に進む
|
||||
# while file.read(1) != b'\n':
|
||||
# # シーク位置を1バイト戻って再度読み込み
|
||||
# # memo: read(1)でシーク位置が1byte進んでいるので、その戻しと合わせて-2移動
|
||||
# file.seek(-2, os.SEEK_CUR)
|
||||
# # 末尾行を抽出
|
||||
# last_line = file.readline().decode().rstrip('\n')
|
||||
# # 末尾行に含まれるタブ文字の数を抽出
|
||||
# buf_count = last_line.count('\t')
|
||||
|
||||
return buf_count
|
||||
|
||||
@classmethod
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user