我们有一个在Windows上用UTF-16编码的数据输入人员,希望使用UTF-8并删除BOM。utf-8转换工作,但BOM仍然存在。我该如何删除这个?这就是我现在拥有的:
batch_3={'src':'/Users/jt/src','dest':'/Users/jt/dest/'}
batches=[batch_3]
for b in batches:
s_files=os.listdir(b['src'])
for file_name in s_files:
ff_name = os.path.join(b['src'], file_name)
if (os.path.isfile(ff_name) and ff_name.endswith('.json')):
print ff_name
target_file_name=os.path.join(b['dest'], file_name)
BLOCKSIZE = 1048576
with codecs.open(ff_name, "r", "utf-16-le") as source_file:
with codecs.open(target_file_name, "w+", "utf-8") as target_file:
while True:
contents = source_file.read(BLOCKSIZE)
if not contents:
break
target_file.write(contents)
如果我看到hexdump-C:
Wed Jan 11$ hexdump -C svy-m-317.json
00000000 ef bb bf 7b 0d 0a 20 20 20 20 22 6e 61 6d 65 22 |...{.. "name"|
00000010 3a 22 53 61 76 6f 72 79 20 4d 61 6c 69 62 75 2d |:"Savory Malibu-|
在生成的文件中。如何删除物料清单?
泰铢
这就是
UTF-16LE
和UTF-16
之间的区别UTF-16LE
是没有BOM的小endianUTF-16
是带有BOM的big或little endian所以当您使用
UTF-16LE
时,BOM只是文本的一部分。改为使用UTF-16
,这样BOM将自动删除。存在UTF-16LE
和UTF-16BE
的原因是,人们可以随身携带“正确编码”的文本,而无需bom,这不适用于您。请注意,当使用一种编码进行编码和使用另一种编码进行解码时会发生什么情况。(
UTF-16
有时会自动检测UTF-16LE
,但并不总是。)或者可以在shell上执行此操作:
只需使用^{} 和^{} :
str.decode
将为您除去BOM(并推断endianness)。相关问题 更多 >
编程相关推荐