日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法

發布時間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果我們編寫以下程序,并分別另存為ANSI和UTF-8兩種不同的編碼方式保存,放到Linux下編譯并運行如下圖,兩端相同的程序以不同的編碼方式保存編譯后的運行結果不一樣,./ansi采用ANSI編碼方式,會自動采用GBK方式來保存中文漢字“中”(“中”的GBK編碼就是d6 d0,utf-8則是e4 b8 ad),那么我們有沒有什么辦法能夠解決不同編碼方式保存才來的執行結果不同的問題呢

#include <stdio.h>int main(int argc, char **argv) {int i = 0;unsigned char *str="abc中";while (str[i]){printf("%02x ", str[i]);i++;}printf("\n");return 0; }

?

怎么解決?編譯程序時,要指定字符集

我們通過man gcc ,并以/charset查找可以知道,我們可以在編譯程序的時候指定編碼方式如下

-finput-charset=charset ?表示源文件的編碼方式, 默認以UTF-8來解析
-fexec-charset=charset ? 表示可執行程序里的字時候以什么編碼方式來表示,默認是UTF-8

?

gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c

指定源文件的編碼方式為GBK(GBK兼容ansiic碼的,因為ansiic碼很少,只有200多個)

指定可執行程序里的字時候以UTF-8編碼方式來表示,結果如下圖,我們成功地解決了這個編碼問題。

?

?

如果我們沒有指定,源文件的編碼方式, 默認以UTF-8來解析,可執行程序里的字默認也是UTF-8,那么我們之前編譯第一個程序./ansi的時候,ansi.c的編碼方式是ANSI,而我們默認采用UTF-8為什么沒有報錯呢,這只能說gcc編譯器沒有那么的偉大,自動識別出來(畢竟不是專門做字符的編碼處理的),需要我們手動地指定才能夠得出正確結果。

總結

以上是生活随笔為你收集整理的关于源文件用不同的编码方式编写,会导致执行结果不一样的现象及解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。