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

我希望能够在我的来源中包含Unicode文字,只要我使用UTF-8并且不使用BOM。

这可以正常工作,直到一点,但是每当我重新打开文件时,它会出现(不好的双关语)。它(毫不奇怪)具有以ANSI形式显示Unicode的这种不障碍的副作用。 :(

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

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

每次编译时,我当然不会成为处理器(通过手动删除),因此我什至求助于使用这些文字的#include文件,但这从几个角度来看是有问题的这是众所周知的痛苦,我看不到他们! ..没有很多杂耍。

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

有帮助吗?

解决方案 2

我已经绕过了更多的东西,并且已经制定了一个暂定的解决方案。我对此并不完全满意,因为它涉及修改源,而我实际上正在寻找一个管道的解决方案,但是G ++似乎。EXE仅接受命令行args(如果我错了,请纠正我)。

我的“解决方案”有点粗糙,但是它有效,并且(对我来说)比我遇到的任何其他可行的解决方案都更好(这是没有!),它需要适当关注您的编辑者的“文件已经过外部修改”消息框(如果正在编辑文件),但实际上,BOM仍在编辑器中,因此这有点有点毫无意义。

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

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

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

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 files are not stripiped of their BOM (if they have one).. A simple BOM y/n arg switch for the routine which #includes these files would solve this issue quite simply... (but it is only a Windows问题...也许那是为什么它没有得到满足的原因...或者有人知道吗?

其他提示

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

这将允许您拥有一个包含一个文件(带有BOM) 全部 如果您必须国际化应用程序,那么您的弦字母将使您的生活变得更加轻松。

我们使用我们的工作来做到这一点,但请记住,我们的1级程序必须是21个不同地区的I18NED,因此我们通过这种方式来节省很多工作:-)您的里程可能会有所不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top