簡體   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