
有兩種解決方法:
1. javac -encoding UTF-8編譯,以test.java的源程序為例,編譯時執行的命令為:javac -encoding UTF-8 test.java

2. 在保存時把java文件轉換成ANSI編碼格式(這里用EditPlus改變編碼格式)

https://blog.csdn.net/a13545564067/article/details/105103846/
UTF-8 到底是什么意思?unicode編碼簡介
在電腦上處理文字的時候,你可能經常接觸到一個名詞,叫UTF-8.

你會不會覺得一絲疑惑,這到底是什么東西?
用一句話說明的話,UTF-8是一種編碼格式,一個字節包含8個比特。
等會,什么是編碼,什么又是比特?為什么要用這個東西?
那我們從基礎說起,簡單的介紹一下基本概念:
編碼
我們都知道人有人的語言,計算機有計算機的語言,就是機器語言,所謂的二進制,0和1,1代表有一個信號,0表示沒有信號。那怎么把人的語言翻譯成機器語言呢,就需要一個字典,字典就是ASCII,如下圖,左邊是這個行為就是編碼,左邊是機器可以識別的ASCII碼,右面是代表的字符,比如 00100001 代表 "!", 從左到右轉換就是解碼 (decode),從右到左就是編碼 (encode)。

因為ASIIC碼有8位數,每位是一個比特 (bit),8位就是一個字節 (byte)。除了第一位是0, 其他7位都可以有0 或者 1 兩個選擇,所以ASCII 一共可以表示 2^7 ,也就是128個字符。包括a-z 大小寫,0-9 數字 和一些標點符號等。其中真正可讀的只有95 個字符,其他的都是一些控制符,比如NUL,代表NULL。
對於英語來說, ASCII 包括所有的字母了,但是對於其他的語言來說,比如漢語,當然95個字符遠遠不夠。有人說ASCII的第一位只能是0很浪費,如果也可以是1 的話, 就會多128個組合,一共256個。然而這樣也不夠。所以我們有:
多字節編碼
上述編碼是單字節編碼, 也就是只有8個比特。如果想匹配多於256個字符的語言,一個字節顯然不夠,用兩個字節的話,16比特,可以編碼65536個字符,BIG-5就是一個雙字節編碼方式,它包括大多數中文繁體字,GB18030 則包括繁體和簡體。比如:

這樣每種語言可能都有他們的編碼體系,用着不同的字節,對於人和機器來說,這樣都很容易混亂。所以我們有:
統一編碼 Unicode
像上文說的,對於一些語言單字節編碼不夠,所以采用雙字節,雙字節也不夠的時候可以采用三字節,甚至四字節,字節是不是越多越好呢?並不是,因為字節用的越多,那些用單字節就能表示的字符會增加很多個0, 浪費很多容量。比如 A 可能就是00000000 00000000 00000000 01000001, 這樣就沒有必要了。
如果一個人想寫不同的語言,那他最好使用Unicode。 Unicode 用多少個字節呢?
0個。
因為Unicode其實不是一種編碼, 而是定義了一個表, 表中為世界上每種語言中的每個字符設定了統一並且唯一的碼位 (code point),以滿足跨語言、跨平台進行文本轉換的要求。在表示一個Unicode的字符
比如一個人想寫一篇文章,包括英語和日語,單字節編碼可以表示英語,但是顯然不能滿足他寫日語,因為他需要3個字節才能表示一個『あ』,也就是11100011 10000001 10000010。 他可以用雙字節編碼,這樣他只需要一個雙字節,也就是00110000 01000010。所以他可以選擇語言最高所需要的編碼,也就是UTF-16. 如果他只需要寫英語, 那UTF-8就可以。

UTF-8
UTF-8的特點是對不同范圍的字符使用不同長度的編碼。

上表表示如何從一個從Unicode 轉化到UTF-8 , 對於前0x7F的字符,UTF-8編碼和ASCII碼是一一對應的。如果一個字符在000800-00FFFF 之間,那轉化到UTF-8 需要用三字節模板,使用16個碼位,每個x 就是一個碼位。
比如『漢』這個字的Unicode編碼是0x6C49。0x6C49在0x0800-0xFFFF之間,使用3字節模板:1110xxxx 10xxxxxx 10xxxxxx。將0x6C49寫成二進制是:0110 1100 0100 1001, 用這個比特流依次代替模板中的x,得到:11100110 10110001 10001001。
當然如果用16位更節約空間。對於中文而言,Unicode 16編碼里面已經包含了GB18030里面的所有漢字(27484個字)。
Unicode的好處
如果一個語言支持Unicode, 說明它本身一個字符就是單字節,比如英語:
>>> string_e = 'hello'
>>> string_e[0]
'h'
每個字符都是一個8位的字符串。所以在Python 里用字符串的截取功能[], 就會給我們第一個字節,同時也是一個字符 h。
如果是漢語,在UTF-8 中三個字節才能代表一個字符。如果我們同樣使用截取[]:
>>> string = '漢字'
>>> string[0]
'\xe6'
只會給我們返回一個「漢」這個字的第一個字節, 也就是11100110, 但是「漢」需要用11100110 10111100 10100010 才能表示。那我們要怎么才能截取漢字的第一個字符呢?
>>> string_u = string.decode('UTF-8')
>>> string_u[0]
u'\u6c49'
>>> print(string_u[0].encode('UTF-8'))
漢
將「漢字」解碼到Unicode, 這時再截取第一個字符就是一個 u 開頭的Unicode了,再用UTF-8 編碼, 返回的就是「漢」 這個字符了。
https://zhuanlan.zhihu.com/p/137875615
