執(zhí)行python腳本出現(xiàn)亂碼的解決方法:首先把中文解碼為unicode,具體方法如:【decode('utf-8')】;然后再轉(zhuǎn)化為gbk即可,具體方法如:【encode('gbk')】。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比長(zhǎng)清網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式長(zhǎng)清網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋長(zhǎng)清地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。
問題:
代碼中指定了UTF-8編碼,但是在cmd命令行窗口時(shí)打印的中文仍然會(huì)亂碼。
(推薦教程:Python入門教程)
原因:
windows下中文默認(rèn)的輸出編碼為gbk ,與腳本中定義的UTF-8不一樣,所以出現(xiàn)了解碼失敗的情況。
解決方法:
可以先把中文解碼為unicode,然后再轉(zhuǎn)化為gbk來解決這個(gè)問題。
舉例:
運(yùn)行結(jié)果:
首先變量最好別命名成str,因?yàn)橛衧tr這個(gè)函數(shù),我就假設(shè)你用的是str0了
對(duì)于你的問題,應(yīng)該是編碼的問題,和split沒有關(guān)系,你可以直接print str0看看。要解決問題,就是進(jìn)行轉(zhuǎn)碼:str0=str0.decode("utf-8").encode("gbk"),然后進(jìn)行str1=str0.split(),
在將 Python 代碼轉(zhuǎn)換為 Java 代碼時(shí),如果出現(xiàn)中文亂碼問題,可以考慮以下方法解決:
在 Python 代碼中使用 Unicode 編碼,并在 Java 代碼中設(shè)置字符集為 "UTF-8"。
使用 Python 的字符串轉(zhuǎn)碼函數(shù),如 .encode('utf-8') ,將字符串轉(zhuǎn)換為 UTF-8 編碼。
使用 Java 的字符串轉(zhuǎn)碼函數(shù),如 new String(string.getBytes("ISO-8859-1"), "UTF-8") ,將字符串轉(zhuǎn)換為 UTF-8 編碼。
使用 Jython 中的 sys 模塊,設(shè)置系統(tǒng)默認(rèn)編碼為 UTF-8 。
設(shè)置環(huán)境變量,在命令行中輸入 export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"
這些方法中的任意一種都可能有助于解決中文亂碼問題,但是具體解決方案取決于應(yīng)用程序的具體情況。
這個(gè)字符串是utf8的。
上網(wǎng)找如何從utf8轉(zhuǎn)到多字節(jié)編碼。
或者使用我提供的思路:
windows下有一個(gè)api叫做MultiByteToWideChar,可以從一種編碼轉(zhuǎn)到UCS2編碼
還有一個(gè)api叫做WideCharToMultiByte,可以從UCS2編碼轉(zhuǎn)到一種編碼
于是你用這兩個(gè)函數(shù),前者把utf8轉(zhuǎn)到UCS2,后者從UCS2轉(zhuǎn)到多字節(jié)編碼(這里的“多字節(jié)編碼”你需要CP_ACP或者932
用atl的話可以這樣:
char a[100];
strcpy(a, CW2A(CA2WEX(s, CP_UTF8)));
頭文件:
atlbase.h
atlconv.h
python 3和2很大區(qū)別就是python本身改為默認(rèn)用unicode編碼。
字符串不再區(qū)分"abc"和u"abc", 字符串"abc"默認(rèn)就是unicode,不再代表本地編碼、
由于有這種內(nèi)部編碼,像c#和java類似,再?zèng)]有必要在語言環(huán)境內(nèi)做類似設(shè)置編碼,比如“sys.setdefaultencoding”;
也因此也python 3的代碼和包管理上打破了和2.x的兼容。2.x的擴(kuò)展包要適應(yīng)這種情況改寫。
另一個(gè)問題是語言環(huán)境內(nèi)只有unicode怎么輸出gbk之類的本地編碼。
答按慣例都在(序列化)輸出時(shí)才轉(zhuǎn)換成本地編碼。
比如
file.write("GBK的中文".encode("GBK"))
python環(huán)境內(nèi)字符串用str.encode("GBK")方法輸出成字節(jié)串用于和其他環(huán)境交流。
亂碼是編碼問題,微軟的excel默認(rèn)打開的編碼是gbk,如果你寫入的數(shù)據(jù)是非gbk編碼的,那么使用微軟excel打開就會(huì)出現(xiàn)亂碼的情況。解決方法為:對(duì)要寫入的數(shù)據(jù)編碼為gbk之后在進(jìn)行寫入,在python中的簡(jiǎn)單的操作方法如下:
1.源數(shù)據(jù)為unicode編碼,則直接使用encode("gbk")即可轉(zhuǎn)換編碼;
str?=?u"我愛中國(guó)共產(chǎn)黨"??#?unicode編碼的字符串
des_str?=?str.encode("gbk")??#轉(zhuǎn)換為gbk編碼
2.源數(shù)據(jù)不是unicode編碼,那么必須先使用decode函數(shù)解碼為unicode編碼,在按照第一種情況轉(zhuǎn)換為gbk編碼。
str?=?u"我愛中國(guó)共產(chǎn)黨"??#?unicode編碼的字符串
src_str?=?str.encode("utf-8")??#?源數(shù)據(jù)格式utf-8
des_str?=?str.decode("utf-8").encode("gbk")??#轉(zhuǎn)換為gbk編碼
注意:encode和decode方法為字符串的方法,不能應(yīng)用與列表等其他類型的數(shù)據(jù)上