vscode Java Scanner 獲取中文字符串println輸出顯示亂碼問題分析和解決方案


@

問題描述

通過new Scanner(System.in).next();輸入一段中文字符串並顯示到控制台時,輸出的總是一些00???@@@等之類的亂碼。

代碼如下:

Scanner sc = new Scanner(System.in);
System.out.println("請輸入中文:");
String str = sc.next();
System.out.println(str);

問題截圖亂碼截圖

問題分析

亂碼現象百分之百都是編碼問題導致的,而我們日常工作學習中,大致有三個方面涉及到編碼格式:

*源文件的查看
*源文件編譯和調試
*終端顯示運行交互過程

除了以上三點,其實還有一個層面,那就是:

*用戶鍵入層面
這是我們Scanner獲取中文字符串輸出時產生亂碼的根結。

問題原因

由於中文操作系統,用戶鍵入的中文默認采用的都是GBK編碼。所以一旦編譯和顯示采用的編碼格式和用戶鍵入的格式不同,就會造成亂碼。

解決思路

我們的解決思路是,確保編譯和終端交互采用的編碼格式和Scanner獲取的中文字符串格式一樣,都是GBK格式。

首先,明確開發環境的編碼格式

源文件編碼

編譯器右下角顯示的就是我們源文件的編碼格式,點擊如圖的UTF-8位置就可以切換源文件打開或者保存的格式。一般這里的編碼格式關系到的是我們查看源文件,對控制台輸出沒影響。
在這里插入圖片描述

終端編碼

由於vscode采用的終端一般是基於cmd或者powershell的,在終端中輸入chcp就能查看到終端采用的編碼格式。
chcp

如圖,返回結果是活動代碼頁:65001,65001代表的是UTF-8編碼,而我們的簡體中文GBK編碼是:936
我們只需要輸入:chcp 936就可以把終端切換成GBK編碼。

可是特殊情況,即便切換到936,最終運行的時候還是會變成65001。看下圖:
launcher.bat

在我們調試運行的時候,控制台總是跳過一大串如圖的字,觀察發現,其中加載過一個launcher.bat文件。ctrl+左鍵打開這個文件:

如圖我們發現里面有一行代碼@chcp.com 65001 > NUL ,我們把其中的65001改成936.
如果進行到這步還是亂碼,那只剩下編譯時候的編碼格式了。

編譯編碼格式

在這里插入圖片描述
如圖點擊vscode側欄運行調試,點擊設置小圖標,打開launch.json
launch.json

如圖,添加"encoding":"GBK",意思就是此文件編譯時采用GBK編碼。

問題解決

jiejue


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM