código Python conversión de formato de codificación

Vine por primera vez a esta empresa, familiarizado con el medio ambiente, el jefe empezó a dejarme hacer una migración, modificar el código para el trabajo, quiero decir es, este trabajo es muy aburrido ~ ~, vistazo al código, para cambiar el código de otras personas, hay un cambio variables, cuando el cambio de nombre de archivo ??????, son algunos sin tecnología, muy complicada cuestión, sino por la forma en que la migración de código entorno familiar Ye Hao. Tirado por lo tanto de que hablar bar temático de hoy - para cambiar el código de formato de codificación, por alguna razón, es necesario migración de código desde la sala de A a B habitación, no se puede visitar entre sí entre los dos, pero por razones históricas que conducen a la sala de máquinas Un Los códigos son todos codificación UTF-8, B sala de GBK se requiere codificación para ver cómo resolver esto.

codificación de problemas

Hablemos acerca de por qué hay un problema de codificación, que tomó el ejemplo de arriba, B habitación en el lado de base de datos completa es GBK codificación, por tanto, sacado de los datos en la base de datos es GBK, sacado de los datos en la base de datos se GBK codificar, para mostrar ninguna distorsión en el tiempo, en un caso en el que la base de datos no convierte los datos extraídos, cuando es necesario para definir la codificación de la cabecera transmitida GBK, el archivo de salida (hTML, TPL, etc.) deben ser de GBK ver la siguiente tabla señalará más claramente:

DB (JDS) => php como (pero no limitado a formato de codificación si el archivo de código kanji, es necesaria la conversión de archivos al codificar o caracteres gbk en la salida del gbk) => cabecera (JDS) => html, TPL (JDS)

O sólo cuando hay una manera de salir de la biblioteca en el código UTF-8 en GBK, o más generalmente utf8 lugares populares, punto menos problemático

DB (GBK) => php como (UTF8, y convierte los datos extraídos de la base de datos a UTF8) => cabecera (utf8) => html, tpl (UTF8)

Sólo tienes que seguir el formato anterior dos especificaciones de codificación, no será ilegible situación, al menos, la primera prueba de manera que no es ningún problema, así que supongo que la segunda también está bien, bueno, ahora escribir una conversión de codificación de archivos formato pequeño script:

#!/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 "[转换失败:]"+_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:"第一个参数不是一个有效的文件夹",3:"源编码和目标编码相同",2:"您要转化的编码不再范围之内: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)

El guión es muy simple, muy simple de usar

./changeEncode.py target_dir fromEncode toEncode
  a la nota aquí, la relación entre la codificación de varias común:

código US-ASCII es un subconjunto de la codificación UTF-8, esto se obtiene a partir de la stackoverflow, cuyo texto ASCII es un subconjunto de UTF-8, por lo que todos los archivos ASCII son ya codificación UTF-8,

He intentado realmente, el espectáculo en el tiempo sin caracteres chinos codificados como US-ASCII, después de la adición de caracteres, en un UTF-8.

No hay formato de codificación ASNI, lo que representa el formato de codificación local, por ejemplo, bajo el sistema operativo en chino simplificado, ASNI codificado en nombre de GBK codificación, este punto también hay que prestar atención

Otro punto es que un formato de codificación de archivo de vista de comandos de Linux es:

presentar -i *

Se puede ver el archivo de formato de codificación.

Por supuesto, los documentos antes mencionados pueden ser algunos caracteres especiales, cuando falla el tratamiento, pero los archivos generales del programa no son un problema.
  Me dirijo a usted, para todo el mundo para recomendar una muy amplia recolección de recursos de aprendizaje pitón, haga clic para entrar , hay un programador senior antes de aprender a compartir experiencias, notas de estudio, hay una posibilidad de experiencia en los negocios, y para todo el mundo para organizar cuidadosamente un cero pitón la base de los datos de proyecto real, pitón diariamente para que en la última tecnología, las perspectivas, aprender a dejar un mensaje de pequeños detalles

Publicado 50 artículos originales · ganado elogios 34 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/haoxun08/article/details/104909274
Recomendado
Clasificación