cmd 終端輸出亂碼問題 |Visual Studio 控制臺輸出中文亂碼解決

在網上下載,或者移植別人的代碼到自己的電腦,使用VS運行后,控制臺輸出中文可能出現亂碼。這是因為源代碼的編碼格式和控制臺的編碼格式不一致。

文章目錄

    • 查看源代碼文件編碼格式
    • 查看輸出控制臺編碼格式
    • 修改編碼格式
      • 修改終端代碼頁
    • 補充
    • 總結

查看源代碼文件編碼格式

打開項目文件夾,找到源代碼文件,右擊,打開方式選擇「記事本」。在右下角會發現有一個編碼格式的說明。常見的就是GB18030UTF-8 兩種情況,GB是國標的縮寫。
在這里插入圖片描述
在記事本中點擊另存為可以更改編碼格式,這里不做贅述。

查看輸出控制臺編碼格式

打開cmd命令行,會跳出控制臺輸出窗口,或者稱作「終端」。
但是Visual Studio 通常使用的不是cmd窗口,因此我們需要編譯運行我們的源文件。
右擊控制臺窗口(不是黑框),點擊屬性。
在這里插入圖片描述
會跳出窗口的屬性,在選項中,會有一個當前代碼頁。
其中,65001 表示UTF-8編碼,936表示GB18030的編碼。
在這里插入圖片描述

修改編碼格式

修改源文件的編碼格式,最基本的方法就是上述提到的,在記事本中「另存為」,即可修改。

不過,源文件通常情況下很多,所以我們一般修改的是終端的編碼。下面介紹下如何修改終端代碼頁,也就是編碼格式。

修改終端代碼頁

方法一: 在代碼的main程序中,可添加一段設定控制臺編碼的代碼。
如果是C++,則可以使用:

    SetConsoleOutputCP(CP_UTF8);  // 輸出編碼設定SetConsoleCP(CP_UTF8);        // 輸入編碼設定

如果是C#,可以用這個:

        // 設置控制臺輸入輸出編碼為UTF-8Console.OutputEncoding = Encoding.UTF8;Console.InputEncoding = Encoding.UTF8;

方法二: 可提前在終端窗口的命令行提示符中,使用cmd命令修改編碼。但是這種修改是暫時的,下一次打開,又得重新修改。

chcp 65001

既然可以通過命令行修改,那么我們則可以在寫的程序中調用命令行,就無需手動修改。
調用系統命令的方法如下:

// C++
system("chcp 65001 > nul");  // 隱藏命令輸出
// C#
System.Diagnostics.Process.Start("cmd.exe", "/c chcp 65001 > nul");

方法三: 修改注冊表

修改注冊表可以永久設置控制臺窗口的編碼格式。

  1. 按 Win+R 輸入 regedit,打開注冊表編輯器。
  2. 找到路徑:
計算機\HKEY_CURRENT_USER\Console

在這里插入圖片描述

  1. 找到Visual Studio 的 console.exe ,修改codePage即可。注意需切換到十進制,65001 才表示UTF-8編碼,936 表示GB18030。

同樣的,這個方法三 ,修改system32_cmd.exe ,則修改的是cmd窗口的編碼格式,也是修改codepage即可。

「方法三」修改一次,后續則一直沿用設置,此外,寫代碼的時候,建議使用「方法一」,在代碼中就把終端編碼設置與源代碼文件一致,這樣可以保證放在其他電腦也不會出現亂碼。

補充

VS的輸出終端通常使用的是VS自帶的控制臺窗口,有的電腦安裝了VS,但是在修改注冊表時,在Console中,可能沒有找到VS相關的 console.exe
我們依舊打開注冊表,找到這個路徑:

計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor

右擊新建 => 字符串值。這個時候,再找到之前說的Console路徑,就會發現出現了與Visual Studio相關的控制臺窗口了,修改codepage即可。

此外,這里列舉一些與終端編碼格式相關的cmd命令,在命令行窗口中可使用:
查看編碼格式代碼:

chcp

修改編碼格式為UTF8:

chcp 65001

除了使用記事本,還可以如何查看源文件編碼格式?可以通過VScode,sublime 等編輯器打開,都可以看到源文件的編碼。如果偏偏想用Visual Studio打開源文件,且查看編碼格式的話,可以在擴展管理器中搜索FileEncoding 安裝使用。這樣,用VS打開可以在右下角隨時查看,并且每次寫代碼之前也可提前修改好編碼格式,再開始寫代碼。
在這里插入圖片描述

總結

通過修改注冊表可以永久修改終端的編碼格式,而如果想保險一點,可以在寫代碼時,就設定好終端控制臺的編碼格式。但除非代碼需要移植,在我們自己的電腦上,自己寫程序+編譯運行,一般是不會出現亂碼的,所以很少代碼會有設定終端編碼的習慣。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75933.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

A009-基于pytest的網易云自動化測試

題 目 :基于pytest的網易云自動化測試 主要內容 綜合應用所學的軟件測試理論和方法,實現網易云的功能自動化測試。 (1)自動化測試介紹; (2)自動化功能測試框架介紹; (3)設計功能測試用例 (4)書寫自動化測試腳本; (5)測試評價與結論。 任務要求 (1)能…

LVGL Video控件和Radiobtn控件詳解

LVGL Video控件和Radiobtn控件詳解 一、 Video控件詳解1. 概述2. 創建和初始化3. 基本屬性設置4. 視頻控制5. 回調函數6. 高級功能7. 注意事項 二、Radiobtn控件詳解1. 概述2. 創建和初始化3. 屬性設置4. 狀態控制5. 組管理6. 事件處理7. 樣式設置8. 注意事項 三、效果展示四、…

AbortController:讓異步操作隨時說停就停

AbortController:讓異步操作隨時說停就停 一、什么是 AbortController? AbortController 是 JavaScript 在瀏覽器和部分 Node.js 環境中提供的全局類,用來中止正在進行或待完成的異步操作(如 fetch() 請求、事件監聽、可寫流、數…

機器學習 從入門到精通 day_04

1. 決策樹-分類 1.1 概念 1. 決策節點 通過條件判斷而進行分支選擇的節點。如:將某個樣本中的屬性值(特征值)與決策節點上的值進行比較,從而判斷它的流向。 2. 葉子節點 沒有子節點的節點,表示最終的決策結果。 3. 決策樹的…

C++ Primer (第五版)-第十三章 拷貝控制

文章目錄 概述13.1拷貝、賦值與銷毀合成拷貝構造函數拷貝初始化參數和返回值拷貝初始化的限制編譯器可以繞過拷貝構造函數拷貝運算符析構函數三/五原則使用default阻止拷貝合成的拷貝控制成員可能是刪除的 private拷貝控制拷貝控制和資源管理行為像值的類類值拷貝賦值運算符定義…

Vue el-from的el-form-item v-for循環表單如何校驗rules(一)

實際業務需求場景: 新增或編輯頁面(基礎信息表單,一個數據列表的表單),數據列表里面的表單數是動態添加的。數據可新增、可刪除,在表單保存前,常常需要做表單必填項的校驗,校驗通過以…

測試100問:http和https的區別是什么?

哈嘍,大家好,我是十二,今天給大家分享的問題是:http和https的區別是什么? 首先我們要知道 HTTP 協議傳播的數據都是未加密的,也就是明文的,因此呢使用 http協議傳輸一些隱私信息也就非常不安全&…

YOLOv3超詳細解讀(三):源碼解析:數據處理模塊

一、概述 YOLOv3(You Only Look Once v3)是一種高效的目標檢測算法,其數據處理模塊是訓練和推理流程的核心部分。本文將深入分析Ultralytics團隊基于PyTorch實現的YOLOv3源碼中的數據處理模塊,重點探討數據加載、預處理和數據增強…

每日算法(雙指針算法)(Day 1)

雙指針算法 1.算法題目(移動零)2.講解算法原理3.編寫代碼 1.算法題目(移動零) 2.講解算法原理 數組劃分,數組分塊(快排里面最核心的一步)只需把0改為tmp 雙指針算法:利用數組下標來…

2025藍橋杯python A組省賽 題解

真捐款去了,好長時間沒練了,感覺腦子和手都不轉悠了。 B F BF BF 賽時都寫假了, G G G 也只寫了爆搜。 題解其實隊友都寫好了,我就粘一下自己的代碼,稍微提點個人的理解水一篇題解 隊友題解 2025藍橋杯C A組省賽 題…

測試基礎筆記第四天(html)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 html介紹1. 介紹2.骨架標簽3.常用標簽標題標簽段落標簽超鏈接標簽圖片標簽換行和空格標簽布局標簽input標簽(變形金剛)form標簽列表標簽 htm…

10 穴 汽車連接器的15個設計特點

汽車行業嚴重依賴卓越的電氣系統來確保功能和可靠性。這些系統的關鍵組件是 10 腔連接器,它為布線和信號傳輸提供解決方案。制造商和工程師必須仔細評估這些連接器的設計特性,以優化性能和安全性。 本博客研究了汽車 10 腔連接器的 15 個設計特征&#…

Summary

一、數據結構 1.1 哈希 主要是HashMap和HashSet&#xff1b;其中HashSet底層是一個HashMap屬性。 // 獲取HashMap元素,HashSet均不支持 map.keySet (); // Set<k> map.values (; // Collection<V> map.entrySet();//Set<Map.Entry<K,V>> for (Map.E…

【Leetcode-Hot100】最小覆蓋子串

題目 解答 想到使用雙指針哈希表來實現&#xff0c;雙指針的left和right控制實現可滿足字符串。 class Solution(object):def minWindow(self, s, t):""":type s: str:type t: str:rtype: str"""len_s, len_t len(s), len(t)hash_map {}for…

Flutter 播放利器:`media_kit` 的詳細介紹與使用指南

在 Flutter 項目中實現音視頻播放&#xff0c;開發者過去主要依賴如 video_player、just_audio 等第三方庫&#xff0c;但這些庫或多或少存在一些局限性&#xff0c;比如平臺兼容性差、定制能力不足、播放格式有限等問題。 而 media_kit 是近年崛起的一款全平臺音視頻播放解決…

4.14【Q】pc homework3

我正在學習并行計算&#xff0c;解決這個問題&#xff1f;詳細解釋&#xff0c;越細節越好 我正在學習并行計算&#xff0c;“首次允許在 taskloop 構造中使用 reduction 子句&#xff0c;并引入了 task_reduction&#xff08;用于 taskgroup 構造&#xff09;和 in_reduction&…

ArrayList vs LinkedList,HashMap vs TreeMap:如何選擇最適合的集合類?

精心整理了最新的面試資料和簡歷模板&#xff0c;有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 在 Java 開發中&#xff0c;集合類的選擇直接影響程序的性能和代碼的可維護性。不同的數據結構適用于不同的場景&#xff0c;盲目使用可能導致內存浪費、性能…

大模型訓練顯存壓縮實戰:ZeRO-3 vs 梯度累積 vs 量化混合策略

一、顯存瓶頸的本質與挑戰 大模型訓練面臨的核心矛盾是模型參數量指數級增長與GPU顯存容量線性提升之間的鴻溝。以175B參數模型為例&#xff0c;其顯存消耗主要來自三個方面&#xff1a; 參數存儲?&#xff1a;FP32精度下需700GB顯存?梯度緩存?&#xff1a;反向傳播產生的…

邊緣計算與隱私計算的融合:構建數據經濟的“隱形護盾“

在數據成為核心生產要素的今天&#xff0c;邊緣計算與隱私計算的交匯正在重塑技術生態。這并非簡單的技術疊加&#xff0c;而是一場關于數據主權、算力分配與信任機制的深度博弈。本文將從"數據流動的拓撲學"視角&#xff0c;探討二者融合如何重構數字社會的基礎設施…

Obsidian 文件夾體系構建 -INKA

Obsidian 文件夾體系構建 -INKA 本篇文章主要分享一下自己折騰學習實踐過的 INKA 框架方法。原地址&#xff1a;Obsidian文件夾體系構建–INKA。 文章目錄 Obsidian 文件夾體系構建 -INKA前言INKA簡介INKA 理論最佳實踐實際應用 反思 前言 上文 Obsidian文件夾體系構建-ACCES…