简介
在使用MSVC编译的时候出现“常量中有换行符”这一错误,网上搜索后可知是由于文件是utf-8编码但没有带BOM导致的。解决方法有很多,因为感觉很麻烦,所以这里我使用python来给没有BOM的文件加上BOM。
代码
import os
cur_dir = os.path.dirname(__file__)
# def test():
# u8_nb_path = os.path.join(cur_dir, 'utf-8_nobom.txt')
# u8_b_path = os.path.join(cur_dir, 'utf-8_bom.txt')
# u8_nb = open(u8_nb_path, "rb")
# u8_b = open(u8_b_path, "rb")
# print(u8_nb.read(1))
# print(u8_nb.read(1))
# print(u8_nb.read(1))
# print(u8_nb.read(1))
# print("")
# print(u8_b.read(1))
# print(u8_b.read(1))
# print(u8_b.read(1))
# print(u8_b.read(1))
# # efbbbf
# u8_nb.close()
# u8_b.close()
def has_bom(content):
return len(content) >= 3 and content[0] == 0xef \
and content[1] == 0xbb and content[2] == 0xbf
def to_utf8_bom_f(filename):
print("To utf8 with bom: " + filename)
f = open(filename, "rb")
content = f.read()
f.close()
if not has_bom(content):
f = open(filename, "wb")
# efbbbf
bom = bytes([0xef, 0xbb, 0xbf])
f.write(bom)
f.write(content)
f.close()
def to_utf8_bom_d(dir, filters=["h", "cpp", "c"]):
for root, dirs, files in os.walk(dir):
for file in files:
splits = file.split('.')
if len(splits) >= 2 and splits[-1] in filters:
to_utf8_bom_f(os.path.join(root, file))
def main():
src_dir = r"D:\Src\sqlitebrowser\git_repos\sqlitebrowser\src"
to_utf8_bom_d(src_dir)
if __name__ == "__main__":
main()
使用方法
将代码中的src_dir
修改成自己的代码目录即可(根据需要修改文件filter
)。
今天的文章“常量中有换行符”的解决方法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28579.html