python輕松實現(xiàn)代碼編碼格式轉(zhuǎn)換
最近剛換工作不久,沒太多的時間去整理工作中的東西,大部分時間都在用來熟悉新公司的業(yè)務,熟悉他們的代碼框架了,最主要的是還有很多新東西要學,我之前主要是做php后臺開發(fā)的,來這邊之后還要把我半路出家的前端學好、還要學習C++,哈哈,總之很充實了,每天下班回家都可以睡的很香(一句話總結(jié),就是吃得香、睡的香~)。再說說換工作時候吧,今年年初正式畢業(yè)半年了,感覺自己技術(shù)增長很快,原公司里面程序員的地位還不如運營,所以想換個工作,面試了3家(2家大的、一家小的),都給offer了,當然從大公司里面挑了個各方面綜合(工資、干什么、交通等等)還不錯的,反正感覺就很順利的進來了(比畢業(yè)的時候容易多了),哈哈,越努力、越幸運,越幸運、越努力!。從這周開始,繼續(xù)整理博客,免得給自己造成懶得習慣。
剛來這個公司,熟悉了環(huán)境,老大就開始讓我做一個遷移、修改代碼的工作,我想說的是,這種工作真沒勁~~,看別人的代碼、改別人的代碼、這里改個變量、那里改個文件名······,都是些沒技術(shù)含量、很繁瑣的事情,不過通過遷移代碼順便熟悉下環(huán)境也好。扯了這么多,說說今天的主題吧——代碼編碼格式改變,由于某些原因,需要將代碼從A機房遷移到B機房,這兩個之間不能互相訪問,但是歷史原因?qū)е翧機房的代碼全是utf8編碼的,B機房要求是GBK編碼,看看這個怎么解決。
編碼問題
先說說為什么會有編碼問題,就拿上面那個例子來說,B機房這邊數(shù)據(jù)庫全是GBK編碼的,因此從數(shù)據(jù)庫中取出來的數(shù)據(jù)都是GBK的,從數(shù)據(jù)庫中取出來的數(shù)據(jù)是GBK編碼的,要在展示的時候不亂碼,在不對數(shù)據(jù)庫取出的數(shù)據(jù)轉(zhuǎn)換的情況下,就需要發(fā)送header的時候設(shè)置編碼為GBK,輸出的文件(html、tpl等)都必須是GBK的,看看下面這個圖會更清楚點:
DB(GBK) => php等(編碼格式不限但如果代碼文件中有漢字,文件就要是gbk編碼或者在漢字輸出的時候轉(zhuǎn)化為gbk) => header(GBK) => html、tpl(GBK)
或者還有一種方式只在出庫的時候在代碼中將utf8轉(zhuǎn)化為gbk,總的來說utf8還是更流行點,問題更少點
DB(GBK) => php等(utf8,并將從數(shù)據(jù)庫取出的數(shù)據(jù)轉(zhuǎn)化為utf8) => header(utf8) => html、tpl(utf8)
只要按照上面這兩種規(guī)范編碼格式,就不會出現(xiàn)亂碼情況,起碼我測試的第一種方式是沒問題的,所以我猜第二種也ok,好了,現(xiàn)在就來寫一個轉(zhuǎn)換文件編碼格式的小腳本:
#!/usr/bin/python # -*- coding: utf-8 -*- #Filename:changeEncode.py import os import sys def ChangeEncode(file,fromEncode,toEncode): try: f=open(file) s=f.read() f.close() u=s.decode(fromEncode) s=u.encode(toEncode) f=open(file,"w"); f.write(s) return 0; except: return -1; def Do(dirname,fromEncode,toEncode): for root,dirs,files in os.walk(dirname): for _file in files: _file=os.path.join(root,_file) if(ChangeEncode(_file,fromEncode,toEncode)!=0): print "[轉(zhuǎn)換失敗:]"+_file else: print "[成功:]"+_file def CheckParam(dirname,fromEncode,toEncode): encode=["UTF-8","GBK","gbk","utf-8"] if(not fromEncode in encode or not toEncode in encode): return 2 if(fromEncode==toEncode): return 3 if(not os.path.isdir(dirname)): return 1 return 0 if __name__=="__main__": error={1:"第一個參數(shù)不是一個有效的文件夾",3:"源編碼和目標編碼相同",2:"您要轉(zhuǎn)化的編碼不再范圍之內(nèi):UTF-8,GBK"} dirname=sys.argv[1] fromEncode=sys.argv[2] toEncode=sys.argv[3] ret=CheckParam(dirname,fromEncode,toEncode) if(ret!=0): print error[ret] else: Do(dirname,fromEncode,toEncode)
腳本很簡單,使用也很簡單
./changeEncode.py target_dir fromEncode toEncode
這里要注意下,幾種常見編碼的關(guān)系:
us-ascii編碼是utf-8編碼的一個子集,這個是從stackoverflow上得到的,原文如下ASCII is a subset of UTF-8, so all ASCII files are already UTF-8 encoded,
我試了下確實是的,在不加漢字的時候顯示編碼為us-ascii,加了漢字之后,變?yōu)閡tf-8。
還有就是ASNI編碼格式,這代表是本地編碼格式,比如說在簡體中文操作系統(tǒng)下,ASNI編碼就代表GBK編碼,這點還需要注意
還有一點就是一個在linux下查看文件編碼格式的命令是:
file -i *
可以看到文件的編碼格式。
當然了,上面的可能有些文件中有特殊字符,處理的時候會失敗,但一般程序文件是沒有問題的。
以上就是本文所述的全部內(nèi)容了,希望對大家學習python能夠有所幫助。
請您花一點時間將文章分享給您的朋友或者留下評論。我們將會由衷感謝您的支持!
- Python基于pandas實現(xiàn)json格式轉(zhuǎn)換成dataframe的方法
- python中有關(guān)時間日期格式轉(zhuǎn)換問題
- python實現(xiàn)m3u8格式轉(zhuǎn)換為mp4視頻格式
- 把JSON數(shù)據(jù)格式轉(zhuǎn)換為Python的類對象方法詳解(兩種方法)
- python實現(xiàn)批量圖片格式轉(zhuǎn)換
- 在Python的struct模塊中進行數(shù)據(jù)格式轉(zhuǎn)換的方法
- Python將圖片批量從png格式轉(zhuǎn)換至WebP格式
- Python實現(xiàn)把json格式轉(zhuǎn)換成文本或sql文件
- 使用python將圖片格式轉(zhuǎn)換為ico格式的示例
- Python實現(xiàn)圖片格式轉(zhuǎn)換
相關(guān)文章
Python時間戳與時間字符串互相轉(zhuǎn)換實例代碼
這篇文章主要介紹了Python時間戳與時間字符串互相轉(zhuǎn)換實例代碼,大家參考使用2013-11-11Python?PEP8?代碼規(guī)范常見問題及解決方法
最近換成?PyCharm?寫代碼總是會出現(xiàn)波浪號,這才了解到?Python?的?PEP8?代碼規(guī)范,所以將常見的?PEP8?代碼規(guī)范問題和解決方法記錄一下,養(yǎng)成良好的習慣,編寫規(guī)范的代碼2023-09-09在Python運行時動態(tài)查看進程內(nèi)部信息的方法
今天小編就為大家分享一篇在Python運行時動態(tài)查看進程內(nèi)部信息的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02Keras模型轉(zhuǎn)成tensorflow的.pb操作
這篇文章主要介紹了Keras模型轉(zhuǎn)成tensorflow的.pb操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07