可能以下有些自己的吐槽話,如果不想看直接跳到最下面即可查看方法。
蒐羅網上一大堆垃圾信息,在這裏給大家提個醒,接下來說的方法,都是本人親測,不能解決亂碼問題的。網上真的一大堆複製粘貼的東西,都不知道那些人有沒測試過的。
- 1.在頭部加上# encoding:utf-8等方式(因爲還有很多寫法就不列出來)
- 2.data.encode(‘utf-8’, errors=‘ignore’).decode(‘utf-8’)。(使用python中的編碼和解碼)
- 3.修改python文件的編碼格式(在setting裏面設置file Ecoding編碼)
- 4.修改java的虛擬機輸出參數(這是我見過最高級的,但好像也沒有用)
如果大家有遇到上面用過的,然後沒有成功解決問題的。大家和我一樣來發發火,真的火都大了。
-----------------------------好了這是分界線,真正解決方案來了----------------
分析
爲什麼文件格式大家都是utf-8,但還是亂碼呢,這是因爲python中print函數的機制問題。如何查看print函數輸出的默認格式編碼呢。執行如下代碼即可:
import locale
print(locale.getdefaultlocale())
他的輸出是:(‘zh_CN’, ‘cp936’)。
查閱百度知道“cp936”及時GB2312的意思(相關知識查看百度吧)。
方法1(java中設置編碼)
這裏調用python使用的是Process,然後把輸入流的字符編碼設置成GB2312即可。
BufferedReader in =
new BufferedReader(new InputStreamReader(process.getInputStream(),"gb2312");
切記:不可讀取完字節流後,在重新getByte編碼,本人測試過,這樣的方法也是亂碼的,如下代碼是不可行!!!
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));//,"gb2312"
String line;
while ((line = in.readLine()) != null) {
line = new String(line.getBytes("GB2312"),"utf-8");
System.out.println(line);
}
方法2(python中設置編碼)
你可能未必使用Process調用,所以可能和我調用方式不同,所以也可以在python中設置編碼格式,如下代碼:
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
如果解決了你的問題的話,請給個贊,謝謝各位看客。