【问题标题】:Add a custom tool to toolchain to remove UTF-8 BOM before compile向工具链添加自定义工具以在编译前删除 UTF-8 BOM
【发布时间】:2011-03-08 19:36:35
【问题描述】:

我的问题是在 Code::Blocks 及其调整版本的 MinGW 和 Notepad++ 的上下文中。

我希望能够在我的源代码中包含 Unicode 文字,而且我可以,只要我使用 UTF-8 而不是使用 BOM。

这在一定程度上可以正常工作,但是每当我重新打开文件时,它就会出现 BOM(坏双关语);它(毫不奇怪)具有以 ANSI 形式显示 Unicode 的令人不安的副作用。 :(

那些非常有用但又非常烦人的三个字节必须在那里,然后它们必须离开! (在编译时)。

听起来很简单,只需预处理源文件,然后丢弃前三个字节(如果它们是 UTF-8 BOM)...

我肯定不会在每次编译时都成为处理器(通过手动删除),所以我什至对这些文字使用了无 BOM 的#include 文件,但这从几个角度来看都是有问题的,而不是最起码的是,这是谚语中的痛苦,我无法“看到”它们! ..没有很多杂耍。

有什么方法可以让我使用自定义预处理器进入工具链? ...或者如果我错过了一些明显的解决方案,我将非常感谢您听到它。

【问题讨论】:

    标签: c++ unicode preprocessor byte-order-mark toolchain


    【解决方案1】:

    您可能需要考虑将所有字符串文字外部化到一个单独的文件中,并使用loadLit() 函数(或类似函数)在运行时获取它们。

    这将允许您拥有一个包含所有您的字符串文字的单个文件(带有 BOM),并且如果您必须国际化您的应用程序,这将使您的生活变得更加轻松。

    我们用我们的东西做到这一点,但请记住,我们的 1 类程序必须针对 21 个不同的语言环境进行 i18n'ed,因此我们这样做可以节省大量工作 :-) 您的里程可能会有所不同。

    【讨论】:

      【解决方案2】:

      我又摸索了一些,并制定了一个暂定的解决方案。我对此并不完全满意,因为它涉及修改源代码,而我实际上是在寻找管道解决方案,但似乎 g++.exe 只接受命令行参数(如果我错了,请纠正我)。

      我的“解决方案”有点粗略,但它确实有效,而且(对我而言)肯定比我遇到的任何其他可行的解决方案(没有!)它需要给予应有的关注到您的编辑器的“文件已被外部修改”消息框(如果正在编辑文件),但事实上,BOM 仍在编辑器中,所以这有点争议。

      这是一个简单的命令行 hack。我更喜欢更集成的选项,但这是一个(并且有效):

      在代码块中,转到:设置 -> 编译器和调试器 -> 其他设置 -> [高级选项] -> 命令行宏:

      将这些模组制作到命令行。 它们都应该在一条线上(当然),但为了清楚起见,我将它们分开了:

      cmd /c DropTheBOM.exe $file
      & $compiler $options $includes -c $file -o $object // (use your compiler cmdline)
      & MakeTheBOM.exe $file
      // Write your own utils, or try here: http://code.google.com/p/utf-bom-utils/
      

      PS:#include 文件不会剥离其 BOM(如果有的话).. #includes这些文件的例程的简单BOM y/n arg开关可以很简单地解决这个问题......(但这只是一个Windows问题......也许这就是它没有得到满足的原因......或者有吗?有人知道吗?

      【讨论】:

        猜你喜欢
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多