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

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

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

如何解決codeblocks編碼問題

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

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

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

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

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

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

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

這個(gè)編譯器可以設(shè)置-finput-charset=charset來指定編譯器用什么編碼解釋輸入源文件。比如如果源文件的字符集是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)一,亂碼由此而生!

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

搞懂了亂碼產(chǎn)生的原因,那么不難得出結(jié)論,如何修改,你想修改成什么都OK,關(guān)鍵是要統(tǒng)一,并不是像網(wǎng)上一些人說的,修改成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è)表示打開文件用的格式,第一次保存文件的時(shí)候也會(huì)用這個(gè)格式。

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

注意,要先設(shè)置好,然后保存文件,才有效。如果你已經(jīng)保存了文件,無論你怎么修改這個(gè)設(shè)置,也不會(huì)改變你文件的格式了。你的文件還是保持第一次保存的時(shí)候的格式。所以,如果遇到無法生效,只能先設(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,就編譯通過了。

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

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

    關(guān)注

    6

    文章

    915

    瀏覽量

    54651
  • CodeBlocks
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    9461

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

文章出處:【微信號(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ù),但無論我運(yùn)行多少次總是正確的結(jié)果,這codeblocks難道還能自動(dòng)改錯(cuò)嗎?#include int main(void
    發(fā)表于 02-24 21:00

    在linux下安裝codeblocks

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

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

    今天用Codeblocks 編程,出現(xiàn)一個(gè)錯(cuò)誤,之前沒有見過,求大神指點(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)沒學(xué)會(huì)什么,后來因某些原因重裝了一下電腦,又準(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上編寫程序

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

    codeblocks簡單的加減法編程

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

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

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

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

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

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

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

    CodeBlocks屬于什么軟件

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

    codeblocks工具欄恢復(fù)

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

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

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

    codeblocks可以做什么東西?

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