Như đã nêu trong tiêu đề, tôi muốn kiểm tra đối tượng tệp đã cho [được mở dưới dạng luồng nhị phân] là tệp UTF-8 hợp lệ.
Anyone?
Cảm ơn
MALAT
11.6K13 Huy hiệu vàng81 Huy hiệu bạc143 Huy hiệu đồng13 gold badges81 silver badges143 bronze badges
hỏi ngày 16 tháng 7 năm 2010 lúc 22:33Jul 16, 2010 at 22:33
def try_utf8[data]:
"Returns a Unicode object on success, or None on failure"
try:
return data.decode['utf-8']
except UnicodeDecodeError:
return None
data = f.read[]
udata = try_utf8[data]
if udata is None:
# Not UTF-8. Do something else
else:
# Handle unicode data
Đã trả lời ngày 16 tháng 7 năm 2010 lúc 22:53Jul 16, 2010 at 22:53
Daniel Stutzbachdaniel StutzbachDaniel Stutzbach
71.5K17 Huy hiệu vàng85 Huy hiệu bạc76 Huy hiệu đồng17 gold badges85 silver badges76 bronze badges
1
Bạn có thể làm một cái gì đó như
import codecs
try:
f = codecs.open[filename, encoding='utf-8', errors='strict']
for line in f:
pass
print "Valid utf-8"
except UnicodeDecodeError:
print "invalid utf-8"
Đã trả lời ngày 16 tháng 7 năm 2010 lúc 22:39Jul 16, 2010 at 22:39
Michaelmichaelmichael
4513 Huy hiệu bạc7 Huy hiệu Đồng3 silver badges7 bronze badges
1
Nếu bất kỳ ai cần một tập lệnh để tìm tất cả các tệp không UTF-8 trong DIR: Nhập hệ điều hành
def try_utf8[data]:
try:
return data.decode['utf-8']
except UnicodeDecodeError:
return None
for root, _, files in os.walk['.']:
if root.startswith['./.git']:
continue
for file in files:
if file.endswith['.pyc']:
continue
path = os.path.join[root, file]
with open[path, 'rb'] as f:
data = f.read[]
data = try_utf8[data]
if data is None:
print[path]
Đã trả lời ngày 13 tháng 6 lúc 17:22Jun 13 at 17:22
VulwsztynvulwsztynVulwsztyn
1.9531 Huy hiệu vàng9 Huy hiệu bạc17 Huy hiệu đồng1 gold badge9 silver badges17 bronze badges
Kiểm tra xem một tệp có chứa UTF-8 hợp lệ không. Trả về 0 cho UTF-8 hợp lệ, in thông báo lỗi cho stdout và trả về 1 cho không hợp lệ.
Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều
#!/usr/bin/env Python | |
# Kiểm tra xem tệp có chứa UTF-8 hợp lệ không | |
# Từ //stackoverflow.com/a/3269323 | |
Nhập khẩu codecs | |
Nhập khẩu sys | |
Nhập khẩu os | |
DEFCHECKFILE [tên tệp]: checkFile[filename]: | |
thử:: | |
withcodecs.open [tên tệp, mã hóa = 'utf-8', lỗi = 'nghiêm ngặt'] ASF: codecs.open[filename, encoding='utf-8', errors='strict'] as f: | |
forlineinf: line in f: | |
đi qua | |
return0 0 | |
ngoại trừ: IOError as e: | |
sys.stderr.write ['io lỗi: %s \ n' %e].stderr.write['IO error: %s\n' % e] | |
return2 2 | |
ngoại trừ UnicodeDecodeError: | |
sys.stdout.write ['%s chứa UTF-8 \ n'%tên gọi không hợp lệ].stdout.write['%s contains invalid UTF-8\n' % filename] | |
return1 1 | |
if__name __ == '__ main__': __name__ == '__main__': | |
iflen [sys.argv]! = 2: len[sys.argv] != 2: | |
P = sys.argv [0] = sys.argv[0] | |
sys.stderr.write ['sử dụng:' +p [p.rfind ['/'] +1:] +'\ n']].stderr.write['Usage: ' + p[p.rfind['/'] + 1:] + ' \n'] | |
sys.exit [2].exit[2] | |
r = CheckFile [sys.argv [1]] = checkFile[sys.argv[1]] | |
sys.exit [r].exit[r] |