1

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

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

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

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

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

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

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

4

2 回答 2

1

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

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

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

于 2010-08-04T03:29:04.273 回答
0

我又摸索了一些,并制定了一个暂定的解决方案。我对此并不完全满意,因为它涉及修改源代码,而我实际上是在寻找管道解决方案,但似乎 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(如果有的话).. 一个简单的 BOM y/n arg 开关用于#includes 这些文件的例程将非常简单地解决这个问题......(但这只是一个Windows 问题...也许这就是为什么它没有得到满足...或者有吗?有人知道吗?

于 2010-06-27T15:28:15.430 回答