python3 java調用python出現中文亂碼解決方案

可能以下有些自己的吐槽話,如果不想看直接跳到最下面即可查看方法。
蒐羅網上一大堆垃圾信息,在這裏給大家提個醒,接下來說的方法,都是本人親測,不能解決亂碼問題的。網上真的一大堆複製粘貼的東西,都不知道那些人有沒測試過的。

  • 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')

如果解決了你的問題的話,請給個贊,謝謝各位看客。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章