1樓:元極
作為一名程式設計菜鳥,我來說說我的理解,一下純屬是我自己遇到問題時,解決問題的個人領悟
cmd中輸入chcp 65001只是改變了cmd內建指令輸出的編碼格式,以及改變了解碼第三方程式輸出的解碼方式,並不能實現從cmd輸入UTF-8編碼格式的內容。也就是說cmd中設為cp65001後,你執行你的程式,輸入"你好",這個"你好"並不是你希望的UTF-8格式(好像也不是GBK編碼,沒驗證過)。
那有什麼辦法能在gbk編碼的中文版Windows系統中,通過cmd向程式輸入UTF-8編碼的內容呢?
1、在cmd內chcp 65001,前面不是說chcp不能實現直接向程式輸入UTF-8編碼的內容嗎?是的,但是chcp可以改變內建命令輸出結果的編碼,所以我們可以通過echo指令輸出UTF-8編碼的內容,再通過管道(pipe)將echo指令的輸出結果作為目標程式的標準輸入傳遞給目標程式
2、編碼UTF-8編碼的檔案,通過重定向符號,向目標程式輸入UTF-8編碼的內容
以上兩種方法只適用於批處理模式,不能很好進行程式和使用者的互動,那有什麼方法能和程式實時互動呢?
1、在Windows下安裝git或者msys,用Windows下的bash shell環境來執行程式,這樣輸入就預設是UTF-8格式了
2、既然中文版Windows下不能設定輸入UTF-8編碼的內容,那只能改程式原始碼了,程式從cp936的控制台讀取gbk的內容,然後呼叫編碼轉換函式,對輸入的內容進行轉碼。
按照題主的意思,他是希望從cmd輸入UTF-8編碼的中文內容,然後和另乙個UTF-8編碼的txt檔案內的中文內容進行比較,我根據題主的意思編寫了以下的demo,原始檔的編碼格式其實無關緊要,GBK或者UTF-8都可以,原始檔編碼格式只影響輸出,並不影響輸入。
//main.c
#include
#include
/* UTF-8格式的tmp.txt的內容
工作狂不是吧?
我覺得不太行!
這真的不行啊!!!
簡直了。
*/int
main();
//為了保證能正常顯示提示,這裡使用英文
printf
("please input a string:"
);scanf
("%s",s1
);printf("
\n");//顯示從標準輸入流讀取到的字串資訊
printf("
\nThe size of the string you input is:%d\n"
,strlen(s1
));//顯示字串長度
printf
("The string you input is:%s\n"
,s1);//顯示輸入的字串
printf("
\n");//將從標準輸入流中讀取到的字串s1,與UTF-8編碼的tmp.txt檔案中的字串做比較
const
char
*filename
="tmp.txt"
;FILE*fp
=fopen
(filename
,"r"
);if(fp
==NULL
)char
tmp[
128]=;
while(0
==feof(fp
))fclose(fp
);fp
=NULL
;return0;
}因為自己菜的原因,不想花時間再去找編碼轉換的函式呼叫,下面就通過Gif來看下怎麼通過管道來向程式輸入UTF-8編碼的內容吧
終端 Shell tty 和控制台(console)有什麼區別?
看了這麼多,貼個自認為解釋到位的鏈結,以饗各位。終端與shell的區別 友人C 裡面寫到 終端的工作其實是很少的哦,簡單來說3點 GUI軟體介面 接收輸入 顯示輸出 而shell的核心工作就是操控計算機核心 嗯嘿哈 先說簡要定義,看不懂的可以直接跳到分割線處,有更通俗的解釋。tty 它是終端的統稱,...
寫「慣」了控制台,怎麼入門win32視窗專案?
個人經驗,win32完全靠翻文件 總之入門的話先去 https 對 Windows 的訊息機制做乙個大概了解,然後再一點點摸索 Juanjie Xi 推薦用各種ui庫,qt,wxwidget.或者老辦法c 寫dll,ui交給vb什麼的 這年頭再學mfc沒什麼意思了 唐hz 從題主的描述來看,遇到的應...
tomcat啟動不起來,但控制台不出錯,為什麼?
終端研發部 來自 部落格園 目錄 二 配置Server.xml部署Web工程 三 新增xml方式部署Wweb工程 四 注意點 將對應位置改為ROOT即可實現目錄預設 三種部署方式的優先級別 這裡我準備了tomcat8.5.43與dubbo控制台的war包來做測試。啟動tomcat 瀏覽器直接訪問 l...