繁体   English   中英

将自定义工具添加到工具链中,以在编译之前删除UTF-8 BOM

[英]Add a custom tool to toolchain to remove UTF-8 BOM before compile

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

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

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

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

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

每次编译时,我当然都不会成为处理器(通过手动删除),所以我什至对这些文字都使用了无BOM的#include文件,但这从多个角度来看都是有问题的,至少这就是众所周知的痛苦,我看不到它们! ..没有太多的杂耍。

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

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

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

我们会用我们的东西做到这一点,但请记住,我们的class 1程序必须在21个不同的语言环境中进行,因此我们通过这样做来节省很多工作:-)您的工作量可能会有所不同。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM