*.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行??? [論壇 - 新手村]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



*.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員二級
註冊日期:
2009/12/17 21:17
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 186
MP : 30 / 7512
EXP: 46
離線
請教各位大大,

一個 *.java 文字檔,在 Windows10正常編譯執行,也是用 UTF8的,在 Ubuntu1604LTS 卻亂碼,不能執行???

如下:

~/NetBeansProjects$ javac -d . MyMath.java
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����

..........................中間省略
^
15 errors

gedit *.java 文字檔出來也是亂碼,請教我是哪裡出錯呢?Ubuntu 預設不是UTF8 嗎?如何處置呢?

請教各位先進,感謝感謝!

2016/12/20 20:14
應用擴展 工具箱
回覆: *.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30267
EXP: 23
離線
clarkliang 寫到:
請教各位大大,

一個 *.java 文字檔,在 Windows10正常編譯執行,也是用 UTF8的,在 Ubuntu1604LTS 卻亂碼,不能執行???

如下:

~/NetBeansProjects$ javac -d . MyMath.java
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����

..........................中間省略
^
15 errors

gedit *.java 文字檔出來也是亂碼,請教我是哪裡出錯呢?Ubuntu 預設不是UTF8 嗎?如何處置呢?

請教各位先進,感謝感謝!


先再次確認您的檔案是否是UTF-8編碼(我知道您上面有提),
先再次釐清這個,再來確認是否是其他關鍵因素造成的。

可以參考這篇「[索引] 文件編碼」紀錄的一些「討論案例」和「相關工具」
來「確認檔案編碼」和「做檔案轉碼的動作」。

GUI的工具,我會傾向先使用「kate」,不用特別設定,就可以「確認檔案編碼」和「做檔案轉碼的動作」。

使用「gedit」,
若是「16.04」請參考「這篇」做設定。
若是「14.04」請參考「這篇」做設定。

CLI的工具,「檔案轉碼」可以使用「iconv」。


2016/12/20 22:02
應用擴展 工具箱
回覆: *.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員二級
註冊日期:
2009/12/17 21:17
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 186
MP : 30 / 7512
EXP: 46
離線
謝謝大大,但成功一半,gedit 正常如下:

package exercise.unit;
public class MyMath {
public float getAvg(float[] dimNum) {
float sum=getSummary(dimNum);
return sum/dimNum.length;
}
public float getSummary(float[] dimNum) {
float sum=0;
for (int i=0; i<dimNum.length; i++)
sum+=dimNum[i];
return sum;
}
public float getStdDev(float[] dimNum) {
float avg = getAvg(dimNum);
float deviation=0;
for (int i=0; i<dimNum.length; i++) //計算離差平方
deviation+=Math.pow(dimNum[i]-avg,2);
float variance=deviation/dimNum.length; //變異數
return (float)Math.sqrt(variance); //標準差
}

但編譯一樣亂碼,不能執行如下:還是 java 的問題?因在 NetBeans IDE 也不行,從 Win10 寫的 *.java 文字檔都不行???


~/NetBeansProjects$ javac MyMath.java
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����

.............中間省略..............................
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int ^
MyMath.java:18: error: unmappable character for encoding UTF8
float variance=deviation/dimNum.length; //�ܲ���
^

^
15 errors

且已執行(執行後有update&upgrade又重開機):
~/NetBeansProjects$ gsettings list-recursively | grep edit | grep encodings
org.gnome.gedit.preferences.encodings candidate-encodings ['UTF-8', 'BIG5', 'BIG5-HKSCS', 'EUC-TW', 'GB18030', 'GB2312', 'GBK', 'CURRENT', 'ISO-8859-15', 'UTF-16']
org.gnome.gedit.preferences.encodings candidate-encodings ['UTF-8', 'BIG5', 'BIG5-HKSCS', 'EUC-TW', 'GB18030', 'GB2312', 'GBK', 'CURRENT', 'ISO-8859-15', 'UTF-16']
org.gnome.gedit.preferences.encodings candidate-encodings ['UTF-8', 'BIG5', 'BIG5-HKSCS', 'EUC-TW', 'GB18030', 'GB2312', 'GBK', 'CURRENT', 'ISO-8859-15', 'UTF-16']
clark@clark-CM1855U1604:~/NetBeansProjects$


現在是gedit已經可以正常顯示,但java還是不能編譯執行,不知如何處置,懇請大大們支援,再次感謝,謝謝!

2016/12/21 7:15
應用擴展 工具箱
回覆: *.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30267
EXP: 23
離線
clarkliang 寫到:
謝謝大大,但成功一半,gedit 正常如下:

package exercise.unit;
public class MyMath {
            public float getAvg(float[] dimNum) {
                        float sum=getSummary(dimNum);
                        return sum/dimNum.length;
            }
            public float getSummary(float[] dimNum) {
                        float sum=0;
                        for (int i=0; i<dimNum.length; i++)
                        sum+=dimNum[i];
                        return sum;
            }
            public float getStdDev(float[] dimNum) {
                        float avg = getAvg(dimNum);
                        float deviation=0;
                                                for (int i=0; i<dimNum.length; i++)       //計算離差平方
                        deviation+=Math.pow(dimNum[i]-avg,2);
                                                float variance=deviation/dimNum.length;   //變異數
                                                return (float)Math.sqrt(variance);        //標準差
            }

但編譯一樣亂碼,不能執行如下:還是 java 的問題?因在 NetBeans IDE 也不行,從 Win10 寫的 *.java 文字檔都不行???


~/NetBeansProjects$ javac MyMath.java
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i=0; i<dimNum.length; i++) //�p�����t����

.............中間省略..............................
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int ^
MyMath.java:18: error: unmappable character for encoding UTF8
float variance=deviation/dimNum.length; //�ܲ���
^

^
15 errors

且已執行(執行後有update&upgrade又重開機):
~/NetBeansProjects$ gsettings list-recursively | grep edit | grep encodings
org.gnome.gedit.preferences.encodings candidate-encodings ['UTF-8', 'BIG5', 'BIG5-HKSCS', 'EUC-TW', 'GB18030', 'GB2312', 'GBK', 'CURRENT', 'ISO-8859-15', 'UTF-16']
org.gnome.gedit.preferences.encodings candidate-encodings ['UTF-8', 'BIG5', 'BIG5-HKSCS', 'EUC-TW', 'GB18030', 'GB2312', 'GBK', 'CURRENT', 'ISO-8859-15', 'UTF-16']
org.gnome.gedit.preferences.encodings candidate-encodings ['UTF-8', 'BIG5', 'BIG5-HKSCS', 'EUC-TW', 'GB18030', 'GB2312', 'GBK', 'CURRENT', 'ISO-8859-15', 'UTF-16']
clark@clark-CM1855U1604:~/NetBeansProjects$


現在是gedit已經可以正常顯示,但java還是不能編譯執行,不知如何處置,懇請大大們支援,再次感謝,謝謝!




歹勢,我上面的回覆沒有說明清楚,

gedit」要處理「Big5編碼」,需要透過設定,包含「正常顯示」和「存檔」,預設沒有開啟這個功能和選項。
所以您透過上面的設定後,就可以正常顯示「Big5編碼的檔案」了,


然後您使用「gedit」,在功能列,選「File」
會出現一個下拉選單,選擇「Save As...」,就會跳出另一個視窗,
在該視窗的左下角,會出現「Character Encoding:」,會顯示您目前檔案的編碼,
若檔案是「Big5」編碼,會顯示「Chinese Traditional(Big5)」。
這時候,您可以選擇「Current Locale(UTF-8)」,按下右下方的按鈕「Save」,
會在跳出一個確認對話框,問您是否要覆蓋檔案,請按下「Replace」那個按鈕,
這樣你原來的檔案就會從「Big5」編碼,轉成「UTF-8」編碼了

================================================================================

也可以透過執行指令來轉碼

假設您原本的檔案「MyMath.java」編碼是「Big5」。

您只要執行下面的指令,就可以將「MyMath.java」,從「Big5」轉成「UTF-8」


$ iconv -f big5 -t utf-8 -o MyMath.java MyMath.java



「-f big5」表示 「from-encoding」,也就是原始的檔案「MyMath.java」是「Big5」編碼。
「-t utf-8」表示 「to-encoding」,也就是要轉成的編碼,要轉成「UTF-8」編碼。
「-o MyMath.java」表示要存成的檔名,因為要覆蓋原來的檔,所以還是填入「MyMath.java」
最後的「MyMath.java」則表示要處理的檔案。

更多「iconv」的用法,請執行「$ man iconv」來閱讀使用方法,
或利用網路查詢關鍵字「iconv big5」來找到相關文章,交互參考。

================================================================================

偵測編碼的指令 (需要額外安裝套件)

執行


$ chardet MyMath.java



顯示


MyMath.java: utf-8 with confidence 0.7525



執行


$ chardet3 MyMath.java




顯示


MyMath.java: utf-8 with confidence 0.7525



執行


$ uchardet MyMath.java



顯示


UTF-8




## Manpage

$ man chardet
$ man chardet3
$ man uchardet

## Package

* python-chardet
* python3-chardet
* uchardet

================================================================================

報告完畢


2016/12/21 10:23
應用擴展 工具箱
回覆: *.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員二級
註冊日期:
2009/12/17 21:17
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 186
MP : 30 / 7512
EXP: 46
離線
感謝大大,感激不盡!

能再請教一下嗎,Ubuntu 1604LTS 安裝好預設的中文內碼是用什麼呢?
ANSI?
BIG5?
UTF-8?
其他?

再次感謝。

(其實我也不知道 Win10 預設中文內碼是什麼,能一併請教嗎?謝謝。)

2016/12/22 7:05
應用擴展 工具箱
回覆: *.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30267
EXP: 23
離線
clarkliang 寫到:
感謝大大,感激不盡!

能再請教一下嗎,Ubuntu 1604LTS 安裝好預設的中文內碼是用什麼呢?
ANSI?
BIG5?
UTF-8?
其他?

再次感謝。

(其實我也不知道 Win10 預設中文內碼是什麼,能一併請教嗎?謝謝。)



我的經驗,目前在「Ubuntu」底下,我使用到的大部分的軟體都優先使用「UTF-8」編碼了。

您可以做個小實驗,
使用「gedit」開一個新檔案,然後輸入中文,存檔,
看看檔案的內容,編碼是否是「UTF-8」,
當然您也可以選擇不同的編碼來存檔,上面「回覆#4」有說明。


至於win的環境,我沒有在使用,所以也沒去深究,待其他人補充


我目前使用的環境是「Xubuntu 16.04 (64位元) 英文界面」。


另外我今天將「[索引] 文件編碼」這篇重新做個整理了,
有興趣深究相關議題的人,可以參考裡面紀錄的「討論案例」和「參考連結」來做探索,
或是也可以從裡面提到的一些關鍵字,從網路上查到更多的資料,讓您有個探索的起點。

報告完畢


另外確認一下,樓主您原本遇到的問題是否已經解決了?


2016/12/22 18:40
應用擴展 工具箱
回覆: *.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員二級
註冊日期:
2009/12/17 21:17
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 186
MP : 30 / 7512
EXP: 46
離線
謝謝大大關心,我還在努力中,謝謝!

2016/12/24 16:12
應用擴展 工具箱
回覆: *.java 文字檔在Windows10正常,在 Ubuntu1604LTS 卻亂碼,不能執行???
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 37
HP : 0 / 905
MP : 679 / 30267
EXP: 23
離線
clarkliang 寫到:
謝謝大大關心,我還在努力中,謝謝!


## MyMath.java

clarkliang 寫到:

package exercise.unit;
public class MyMath {
	public float getAvg(float[] dimNum) {
		float sum = getSummary(dimNum);
		return sum / dimNum.length;
	}
	public float getSummary(float[] dimNum) {
		float sum = 0;
		for (int i = 0; i < dimNum.length; i++)
			sum += dimNum[i];
		return sum;
	}
	public float getStdDev(float[] dimNum) {
		float avg = getAvg(dimNum);
		float deviation = 0;
		for (int i = 0; i < dimNum.length; i++) //計算離差平方
			deviation += Math.pow(dimNum[i] - avg, 2);
		float variance = deviation / dimNum.length; //變異數
		return (float) Math.sqrt(variance); //標準差
	}
}



## 測試報告

我剛剛去下載「NetBeans」來安裝測試。

您上面回覆的程式碼,是可以編譯成功的。

包含

* 直接用「NetBeans」來撰寫編譯,
* 或是文字編輯器寫好,再用指令「javac」來編譯。

執行


$ file MyMath.java



顯示


MyMath.java: UTF-8 Unicode text




原本檔案的編碼就是「UTF-8」了。

================================================================================

我若執行下面指令,將上面「MyMath.java」的檔案編碼從「UTF-8」轉成「Big5」,


$ iconv -f utf-8 -t big5 -o MyMath.java MyMath.java



再用指令「javac MyMath.java」編譯,就會出現您上面提到的錯誤訊息。

執行


$ file MyMath.java



顯示


MyMath.java: ISO-8859 text




執行


$ uchardet MyMath.java



顯示


Big5



執行


$ chardet3 MyMath.java



顯示


MyMath.java: Big5 with confidence 0.99



再執行下面指令編譯


$ javac MyMath.java



顯示



MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:16: error: unmappable character for encoding UTF8
for (int i = 0; i < dimNum.length; i++) //�p�����t����
^
MyMath.java:18: error: unmappable character for encoding UTF8
float variance = deviation / dimNum.length; //�ܲ���
^
MyMath.java:18: error: unmappable character for encoding UTF8
float variance = deviation / dimNum.length; //�ܲ���
^
MyMath.java:18: error: unmappable character for encoding UTF8
float variance = deviation / dimNum.length; //�ܲ���
^
MyMath.java:18: error: unmappable character for encoding UTF8
float variance = deviation / dimNum.length; //�ܲ���
^
MyMath.java:19: error: unmappable character for encoding UTF8
return (float) Math.sqrt(variance); //�зǮt
^
15 errors



================================================================================

以上提供參考


2016/12/24 16:51
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.