欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python輕松實(shí)現(xiàn)代碼編碼格式轉(zhuǎn)換

 更新時(shí)間:2015年03月26日 08:50:35   投稿:hebedich  
由于某些原因,需要將代碼從A機(jī)房遷移到B機(jī)房,這兩個(gè)之間不能互相訪問(wèn),但是歷史原因?qū)е翧機(jī)房的代碼全是utf8編碼的,B機(jī)房要求是GBK編碼,看看這個(gè)怎么解決。雖然很簡(jiǎn)單,但是還是要推薦給大家,需要的小伙伴參考下吧。

  最近剛換工作不久,沒(méi)太多的時(shí)間去整理工作中的東西,大部分時(shí)間都在用來(lái)熟悉新公司的業(yè)務(wù),熟悉他們的代碼框架了,最主要的是還有很多新東西要學(xué),我之前主要是做php后臺(tái)開發(fā)的,來(lái)這邊之后還要把我半路出家的前端學(xué)好、還要學(xué)習(xí)C++,哈哈,總之很充實(shí)了,每天下班回家都可以睡的很香(一句話總結(jié),就是吃得香、睡的香~)。再說(shuō)說(shuō)換工作時(shí)候吧,今年年初正式畢業(yè)半年了,感覺自己技術(shù)增長(zhǎng)很快,原公司里面程序員的地位還不如運(yùn)營(yíng),所以想換個(gè)工作,面試了3家(2家大的、一家小的),都給offer了,當(dāng)然從大公司里面挑了個(gè)各方面綜合(工資、干什么、交通等等)還不錯(cuò)的,反正感覺就很順利的進(jìn)來(lái)了(比畢業(yè)的時(shí)候容易多了),哈哈,越努力、越幸運(yùn),越幸運(yùn)、越努力!。從這周開始,繼續(xù)整理博客,免得給自己造成懶得習(xí)慣。

  剛來(lái)這個(gè)公司,熟悉了環(huán)境,老大就開始讓我做一個(gè)遷移、修改代碼的工作,我想說(shuō)的是,這種工作真沒(méi)勁~~,看別人的代碼、改別人的代碼、這里改個(gè)變量、那里改個(gè)文件名······,都是些沒(méi)技術(shù)含量、很繁瑣的事情,不過(guò)通過(guò)遷移代碼順便熟悉下環(huán)境也好。扯了這么多,說(shuō)說(shuō)今天的主題吧——代碼編碼格式改變,由于某些原因,需要將代碼從A機(jī)房遷移到B機(jī)房,這兩個(gè)之間不能互相訪問(wèn),但是歷史原因?qū)е翧機(jī)房的代碼全是utf8編碼的,B機(jī)房要求是GBK編碼,看看這個(gè)怎么解決。

編碼問(wèn)題
  先說(shuō)說(shuō)為什么會(huì)有編碼問(wèn)題,就拿上面那個(gè)例子來(lái)說(shuō),B機(jī)房這邊數(shù)據(jù)庫(kù)全是GBK編碼的,因此從數(shù)據(jù)庫(kù)中取出來(lái)的數(shù)據(jù)都是GBK的,從數(shù)據(jù)庫(kù)中取出來(lái)的數(shù)據(jù)是GBK編碼的,要在展示的時(shí)候不亂碼,在不對(duì)數(shù)據(jù)庫(kù)取出的數(shù)據(jù)轉(zhuǎn)換的情況下,就需要發(fā)送header的時(shí)候設(shè)置編碼為GBK,輸出的文件(html、tpl等)都必須是GBK的,看看下面這個(gè)圖會(huì)更清楚點(diǎn):

    DB(GBK) => php等(編碼格式不限但如果代碼文件中有漢字,文件就要是gbk編碼或者在漢字輸出的時(shí)候轉(zhuǎn)化為gbk) => header(GBK)  => html、tpl(GBK)

  或者還有一種方式只在出庫(kù)的時(shí)候在代碼中將utf8轉(zhuǎn)化為gbk,總的來(lái)說(shuō)utf8還是更流行點(diǎn),問(wèn)題更少點(diǎn)

    DB(GBK) => php等(utf8,并將從數(shù)據(jù)庫(kù)取出的數(shù)據(jù)轉(zhuǎn)化為utf8) => header(utf8) => html、tpl(utf8)

  只要按照上面這兩種規(guī)范編碼格式,就不會(huì)出現(xiàn)亂碼情況,起碼我測(cè)試的第一種方式是沒(méi)問(wèn)題的,所以我猜第二種也ok,好了,現(xiàn)在就來(lái)寫一個(gè)轉(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:"第一個(gè)參數(shù)不是一個(gè)有效的文件夾",3:"源編碼和目標(biāo)編碼相同",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)

  腳本很簡(jiǎn)單,使用也很簡(jiǎn)單

復(fù)制代碼 代碼如下:

  ./changeEncode.py target_dir fromEncode toEncode

這里要注意下,幾種常見編碼的關(guān)系:

  us-ascii編碼是utf-8編碼的一個(gè)子集,這個(gè)是從stackoverflow上得到的,原文如下ASCII is a subset of UTF-8, so all ASCII files are already UTF-8 encoded,

我試了下確實(shí)是的,在不加漢字的時(shí)候顯示編碼為us-ascii,加了漢字之后,變?yōu)閡tf-8。

  還有就是ASNI編碼格式,這代表是本地編碼格式,比如說(shuō)在簡(jiǎn)體中文操作系統(tǒng)下,ASNI編碼就代表GBK編碼,這點(diǎn)還需要注意

  還有一點(diǎn)就是一個(gè)在linux下查看文件編碼格式的命令是:

復(fù)制代碼 代碼如下:

file -i *

  可以看到文件的編碼格式。

  當(dāng)然了,上面的可能有些文件中有特殊字符,處理的時(shí)候會(huì)失敗,但一般程序文件是沒(méi)有問(wèn)題的。

以上就是本文所述的全部?jī)?nèi)容了,希望對(duì)大家學(xué)習(xí)python能夠有所幫助。

請(qǐng)您花一點(diǎn)時(shí)間將文章分享給您的朋友或者留下評(píng)論。我們將會(huì)由衷感謝您的支持!

相關(guān)文章

  • Python時(shí)間戳與時(shí)間字符串互相轉(zhuǎn)換實(shí)例代碼

    Python時(shí)間戳與時(shí)間字符串互相轉(zhuǎn)換實(shí)例代碼

    這篇文章主要介紹了Python時(shí)間戳與時(shí)間字符串互相轉(zhuǎn)換實(shí)例代碼,大家參考使用
    2013-11-11
  • python——全排列數(shù)的生成方式

    python——全排列數(shù)的生成方式

    今天小編就為大家分享一篇python——全排列數(shù)的生成方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • PyQt QCombobox設(shè)置行高的方法

    PyQt QCombobox設(shè)置行高的方法

    今天小編就為大家分享一篇PyQt QCombobox設(shè)置行高的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python?PEP8?代碼規(guī)范常見問(wèn)題及解決方法

    Python?PEP8?代碼規(guī)范常見問(wèn)題及解決方法

    最近換成?PyCharm?寫代碼總是會(huì)出現(xiàn)波浪號(hào),這才了解到?Python?的?PEP8?代碼規(guī)范,所以將常見的?PEP8?代碼規(guī)范問(wèn)題和解決方法記錄一下,養(yǎng)成良好的習(xí)慣,編寫規(guī)范的代碼
    2023-09-09
  • 如何快速一次性卸載所有python包(第三方庫(kù))呢

    如何快速一次性卸載所有python包(第三方庫(kù))呢

    這篇文章主要介紹了如何快速一次性卸載所有python包(第三方庫(kù))呢,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Pandas修改DataFrame列名的兩種方法實(shí)例

    Pandas修改DataFrame列名的兩種方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Pandas修改DataFrame列名的兩種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Pandas具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 在Python運(yùn)行時(shí)動(dòng)態(tài)查看進(jìn)程內(nèi)部信息的方法

    在Python運(yùn)行時(shí)動(dòng)態(tài)查看進(jìn)程內(nèi)部信息的方法

    今天小編就為大家分享一篇在Python運(yùn)行時(shí)動(dòng)態(tài)查看進(jìn)程內(nèi)部信息的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Keras模型轉(zhuǎn)成tensorflow的.pb操作

    Keras模型轉(zhuǎn)成tensorflow的.pb操作

    這篇文章主要介紹了Keras模型轉(zhuǎn)成tensorflow的.pb操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Python實(shí)現(xiàn)識(shí)別圖像中人物的示例代碼

    Python實(shí)現(xiàn)識(shí)別圖像中人物的示例代碼

    這篇文章主要介紹了通過(guò)face_recognition提供的demo代碼,簡(jiǎn)單調(diào)整了一下,從而實(shí)現(xiàn)識(shí)別圖像中人物的功能,感興趣的可以跟隨小編一起試試
    2022-01-01
  • OpenCV?讀取圖像imread的使用詳解

    OpenCV?讀取圖像imread的使用詳解

    這篇文章主要介紹了OpenCV?讀取圖像imread的使用詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09

最新評(píng)論