0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何解決codeblocks編碼問(wèn)題

嵌入式單片機(jī) ? 來(lái)源:未知 ? 作者:胡薇 ? 2018-11-15 14:18 ? 次閱讀

要解決這個(gè)問(wèn)題,先要搞清楚有三個(gè)地方涉及到編碼問(wèn)題。

1.1CodeBlocks編輯器保存源文件用的編碼。

默認(rèn)情況下,是保存為windows本地編碼的,也就是WINDOWS-936字符集,也就是GBK編碼。

但是很神奇的是,GCC編譯器默認(rèn)編譯的時(shí)候是按照UTF-8解析的。你存成GBK,但是當(dāng)成UTF-8解析,這還能編譯通過(guò),這才有鬼了,所以這兩個(gè)地方編碼不統(tǒng)一好,編譯的時(shí)候報(bào)錯(cuò):error: converting to execution character set: Illegal byte sequence,你根本連通過(guò)編譯的可能性都沒(méi)有!

其實(shí)要解決這個(gè)問(wèn)題很簡(jiǎn)單,編寫(xiě)Code::Blocks的人只需要在調(diào)用編譯器之前檢測(cè)一下源文件是什么編碼,然后就自動(dòng)讓編譯器用什么編碼進(jìn)行解釋?zhuān)瑔?wèn)題就解決了。只是很可惜,Code::Blocks編寫(xiě)的人可能還沒(méi)有這么做,或許是對(duì)本地化認(rèn)識(shí)不夠吧,也可能是覺(jué)得沒(méi)必要吧?(所以就給初學(xué)的人帶來(lái)問(wèn)題了,所以就覺(jué)得易用性不如微軟了,免費(fèi)和商業(yè)的東西還是有差距的)

1.2GCC編譯器編譯的時(shí)候?qū)斎氲脑次募忉層玫木幋a

這個(gè)編譯器可以設(shè)置-finput-charset=charset來(lái)指定編譯器用什么編碼解釋輸入源文件。比如如果源文件的字符集是GBk,那么就必須指定-finput-charset=GBK,如果不指定,一律當(dāng)做UTF-8處理。

除非你源文件真的是UTF-8,否則就會(huì)出現(xiàn)轉(zhuǎn)換錯(cuò)誤。

1.3編譯好的執(zhí)行文件所用編碼

如果你1和2兩個(gè)地方的編碼都能統(tǒng)一,那么編譯時(shí)不會(huì)報(bào)錯(cuò)了,但是編譯好了,運(yùn)行一下看看,在控制臺(tái)顯示的依然是亂碼!

那是因?yàn)榭刂婆_(tái)顯示的時(shí)候缺省的是使用系統(tǒng)默認(rèn)的字符集,比如windows下用的是GBk,但是默認(rèn)情況下,編譯之后的執(zhí)行文件時(shí)編譯成UTF-8的,所以又出現(xiàn)了不統(tǒng)一,亂碼由此而生!

解決的方法和簡(jiǎn)單,就是給編譯器加上選項(xiàng):-fexec-charset=GBK,和windows默認(rèn)的統(tǒng)一,就OK了。

搞懂了亂碼產(chǎn)生的原因,那么不難得出結(jié)論,如何修改,你想修改成什么都OK,關(guān)鍵是要統(tǒng)一,并不是像網(wǎng)上一些人說(shuō)的,修改成GBK就OK,其實(shí)你要修改成UTF-8都OK,關(guān)鍵是統(tǒng)一。

1.4修改的地方。

1.修改源文件保存編碼在:settings->Editor->gernal settings找到Encoding group Box

Use encoding when opening files:這個(gè)表示打開(kāi)文件用的格式,第一次保存文件的時(shí)候也會(huì)用這個(gè)格式。

As default encoding:表示設(shè)置為文件缺省保存和打開(kāi)編碼格式

注意,要先設(shè)置好,然后保存文件,才有效。如果你已經(jīng)保存了文件,無(wú)論你怎么修改這個(gè)設(shè)置,也不會(huì)改變你文件的格式了。你的文件還是保持第一次保存的時(shí)候的格式。所以,如果遇到無(wú)法生效,只能先設(shè)置好格式,再重新建文件了。

2.修改編譯器對(duì)源文件解釋編碼格式和生成執(zhí)行文件執(zhí)行時(shí)候采用的編碼格式是在settings->compiler and debugger settings里面,選擇對(duì)應(yīng)的GCC編譯器

在other options里面加入:

-finput-charset=charset

-fexec-charset=charset

第一個(gè)參數(shù)表示編譯的時(shí)候輸入文件的編碼解釋格式,第二參數(shù)表示生成的執(zhí)行文件執(zhí)行的時(shí)候顯示用的編碼格式。這些參數(shù)如果和實(shí)際不吻合,必然產(chǎn)生亂碼。只要吻合,就不會(huì)亂碼了。

由于我的源文件格式是WINDOWS-936,但是這里設(shè)置成UTF-8,所以編譯肯定報(bào)錯(cuò)!

只需要修改成-finput-charset=WINDOWS-936或者GBk,就編譯通過(guò)了。

如果不設(shè)置fexec-charset默認(rèn)會(huì)認(rèn)為執(zhí)行環(huán)境是UTF-8,而windows下并不是,所以Linux下沒(méi)問(wèn)題,因?yàn)閘inux就是UTF-8的,但是windows下必然出現(xiàn)亂碼。所以設(shè)置成GBk,就統(tǒng)一了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    944

    瀏覽量

    54843
  • CodeBlocks
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    9504

原文標(biāo)題:codeblocks編碼問(wèn)題

文章出處:【微信號(hào):qrsworld,微信公眾號(hào):嵌入式單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    codeblocks經(jīng)典

    codeblocks經(jīng)典
    發(fā)表于 06-15 13:08

    神奇的codeblocks

    各位大神麻煩看看這是怎么回事,第二次計(jì)算的代碼明顯是錯(cuò)的,應(yīng)該生成隨機(jī)數(shù),但無(wú)論我運(yùn)行多少次總是正確的結(jié)果,這codeblocks難道還能自動(dòng)改錯(cuò)嗎?#include int main(void
    發(fā)表于 02-24 21:00

    在linux下安裝codeblocks

    在linux下安裝codeblocks后,寫(xiě)一段程序,編譯都沒(méi)有問(wèn)題,到了運(yùn)行階段就出錯(cuò),起初上網(wǎng)查沒(méi)找到解決方案,后來(lái)看到百度文庫(kù)里的一篇文章才解決了,原來(lái)是沒(méi)有配置運(yùn)行控制臺(tái),
    發(fā)表于 07-24 08:18

    Codeblocks編程報(bào)錯(cuò)是什么原因?qū)е碌模?/a>

    今天用Codeblocks 編程,出現(xiàn)一個(gè)錯(cuò)誤,之前沒(méi)有見(jiàn)過(guò),求大神指點(diǎn),是什么原因?qū)е碌摹?c:winavrbin..libgccavr4.3.3........avrlibavr5crtm644pa.o:(.init9+0x0)||undefined reference to `main\'|
    發(fā)表于 10-31 07:43

    codeblocks 51單片機(jī)學(xué)習(xí)(一)

    codeblocks 51單片機(jī)學(xué)習(xí)(一)原先是在keil下進(jìn)行51單片機(jī)編程的,那個(gè)時(shí)候跟著視頻學(xué),發(fā)現(xiàn)沒(méi)學(xué)會(huì)什么,后來(lái)因某些原因重裝了一下電腦,又準(zhǔn)備繼續(xù)學(xué)習(xí)51單片機(jī),決定換一個(gè)環(huán)境,也就
    發(fā)表于 11-11 18:21 ?8次下載
    <b class='flag-5'>codeblocks</b> 51單片機(jī)學(xué)習(xí)(一)

    codeblocks環(huán)境下SDCC編譯單片機(jī)程序

    1.分別下載安裝Codeblocks + SDCC2. 在codeblocks中進(jìn)菜單設(shè)置 settings/complier選擇 Small Device C Complier,Set
    發(fā)表于 11-24 18:06 ?14次下載
    <b class='flag-5'>codeblocks</b>環(huán)境下SDCC編譯單片機(jī)程序

    怎樣在codeblocks上編寫(xiě)程序

    CodeBlocks上編寫(xiě)程序是一項(xiàng)相對(duì)簡(jiǎn)單而又重要的任務(wù)。CodeBlocks是一個(gè)廣泛使用的集成開(kāi)發(fā)環(huán)境(IDE),它能夠幫助程序員編寫(xiě)、編譯和運(yùn)行他們的代碼。在本篇文章中,我們將詳細(xì)介紹
    的頭像 發(fā)表于 11-26 09:26 ?1633次閱讀

    codeblocks簡(jiǎn)單的加減法編程

    CodeBlocks是一種常見(jiàn)的集成開(kāi)發(fā)環(huán)境(IDE),用于編寫(xiě)、運(yùn)行和調(diào)試各種編程語(yǔ)言的程序。在本文中,我們將探索如何使用CodeBlocks進(jìn)行加減法編程。我們將詳細(xì)介紹CodeBlocks
    的頭像 發(fā)表于 11-26 09:27 ?1188次閱讀

    codeblocks如何恢復(fù)默認(rèn)布局

    CodeBlocks 是一款流行的開(kāi)源集成開(kāi)發(fā)環(huán)境(IDE),適用于多種編程語(yǔ)言,如 C、C++、Fortran 等。在 CodeBlocks 中,您可以自定義和修改窗口布局,以滿(mǎn)足個(gè)人編程需求
    的頭像 發(fā)表于 11-26 09:35 ?7663次閱讀

    codeblocks環(huán)境錯(cuò)誤解決辦法

    CodeBlocks是一款常用的集成開(kāi)發(fā)環(huán)境,用于編寫(xiě)、編譯和調(diào)試C、C++等程序。然而,有時(shí)在使用CodeBlocks時(shí)可能會(huì)遇到一些錯(cuò)誤或問(wèn)題。本文將為你提供一些常見(jiàn)CodeBlocks環(huán)境錯(cuò)誤
    的頭像 發(fā)表于 11-26 09:37 ?7214次閱讀

    CodeBlocks保存的項(xiàng)目在哪找

    CodeBlocks是一個(gè)集成開(kāi)發(fā)環(huán)境 (IDE),主要用于C和C++程序開(kāi)發(fā)。它提供了一種方便的方式來(lái)編寫(xiě)、調(diào)試和構(gòu)建代碼。 首先,我們需要知道CodeBlocks的項(xiàng)目文件實(shí)際上是由多個(gè)文件組成
    的頭像 發(fā)表于 11-26 09:40 ?2766次閱讀

    CodeBlocks屬于什么軟件

    CodeBlocks是一款集成開(kāi)發(fā)環(huán)境(Integrated Development Environment,簡(jiǎn)稱(chēng)IDE),專(zhuān)門(mén)用于編寫(xiě)、編輯、編譯和調(diào)試程序的軟件。它提供了一系列的工具和功能,方便
    的頭像 發(fā)表于 11-26 09:53 ?4055次閱讀

    codeblocks工具欄恢復(fù)

    CodeBlocks是一種開(kāi)發(fā)環(huán)境,廣泛用于編寫(xiě)和調(diào)試各種編程語(yǔ)言的源代碼。它提供了用戶(hù)友好的界面,以及各種工具和功能,方便程序員進(jìn)行開(kāi)發(fā)工作。而恢復(fù)CodeBlocks工具欄的功能也是程序員在
    的頭像 發(fā)表于 11-26 09:57 ?5346次閱讀

    codeblocks怎么創(chuàng)建c文件

    CodeBlocks 中,你可以按照以下步驟創(chuàng)建一個(gè)新的 C 文件: 步驟 1: 打開(kāi) CodeBlocks 首先,你需要打開(kāi) CodeBlocks IDE。你可以在開(kāi)始菜單或快捷方式上找到它
    的頭像 發(fā)表于 11-26 10:21 ?4817次閱讀

    codeblocks可以做什么東西?

    Codeblocks是一個(gè)開(kāi)源的集成開(kāi)發(fā)環(huán)境(IDE),用于編寫(xiě)、編譯和調(diào)試各種編程語(yǔ)言的程序。它是一個(gè)跨平臺(tái)的開(kāi)發(fā)工具,支持多種操作系統(tǒng),包括Windows、Mac OS和Linux
    的頭像 發(fā)表于 11-26 10:23 ?1921次閱讀