“常量中有换行符”的解决方法

“常量中有换行符”的解决方法简介在使用MSVC编译的时候出现“常量中有换行符”这一错误,网上搜索后可知是由于文件是utf-8编码但没有带BOM导致的。解决方法有很多,因为感觉很麻烦,所以这里我使用python来给没有BOM的文件加上BOM。代码importoscur_dir=os.path.dirname(__file__)#deftest():#u8_nb_path=os.path.join(cur_dir,’utf-8_nobom.txt’)#u8_b_path=os.pat

“常量中有换行符”的解决方法"

简介

在使用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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注