vscode讀取中文問題(控制台已設定為utf 8,vscode編輯也已設定為utf 8)怎麼解決?

時間 2021-10-16 02:15:41

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...