Cómo convertir por lotes en Linux codificación UTF-8 a la codificación GB2312

  

error de codificación y la codificación UTF8 GB2312 es diferente, UTF-8 codificación de importación en escritura sqlplus SQL será ilegible, entonces usted necesita para convertir a la codificación UTF8 GB2312 La codificación, pero una a una conversión es muy molesta, la siguiente serie pequeña le enseña cómo convertir la codificación UTF8 en la codificación GB2312 en Linux. Cuando

Antecedentes

I a granel secuencia de comandos SQL importación-UTF8 codificado utilizando el sqlplus de Oracle, no sé cómo configurar el reconocimiento debido a que el formato UTF8 sqlplus, lo que resulta en ilegible, errores tales como la línea incorrecta Y para que el trabajo no pueda continuar, en el caso de google no fruit, tuve que encontrar una forma de convertir el código.

Debido a la gran cantidad de archivos, la conversión manual es demasiado complicada, por lo que pensé en la conversión por lotes con scripts. Afortunadamente, hay muchos scripts relacionados en Internet. El único problema para implementar es el marcado UTF8 BOM.

Contenido:

El código es el siguiente:

#! /bin /bash

para bucle en `find. -type f -name y ". * sql y " -print`do

echo $ bucle

mv -f $ loop $ loop.tmp

dos2unix $ loop.tmp

file_check_utf8 = ‘ file_check_utf8.log y rsquo;

sed -n y lsquo; 1l y rsquo;. $ loop.tmp "$ file_check_utf810 si grep y lsquo; ^ \\\\ 357 \\\\ \\\\ 273 277 y rsquo; $ file_check_utf8 "/dev /null 2" &111 luego

echo ‘. BOM UTF-8 y rsquo;

sed -n -e y lsquo; 1s /^ .. . //y rsquo; -e y lsquo; w intermediate.txt y rsquo; .. $ Loop.tmp14 iconv -f UTF-8 -t GB2312 -o $ bucle intermediate.txt15 rm-rf intermediate.txt

rm -rf $ loop.tmp

Elif iconv -f UTF-8 -t GB2312 $ loop.tmp "/dev /null 2" &. 118 entonces

echo ‘ UTF-8 y rsquo;

iconv -f UTF-8 -t GB2312 -o $ loop $ loop.tmp21 rm -rf $ loop.tmp

demás

echo ‘. ANSI y rsquo;

mv -f $ $ loop.tmp bucle

fi

rm -rf $ file_check_utf8

unix2dos # simulación, los requisitos deben ser la última línea del archivo de texto de un salto de línea 28. sed -n -e y lsquo; s /$ /\\ r /g y rsquo; -e y lsquo; w ’. $ loop.tmp $ loop29 mv -f $ loop.tmp $ bucle

hecho

#! /bin /bash

para bucle en `find. -type f -name " *. sql " -print`do

echo $ loop

mv -f $ loop $ loop.tmp

dos2unix $ loop.tmp

file_check_utf8 = ‘ file_check_utf8.log y rsquo;

sed -n y lsquo; 1l y rsquo;. $ loop.tmp "$ file_check_utf810 si grep y lsquo; ^ \\\\ 357 \\\\ \\\\ 273 277 y rsquo; $ file_check_utf8 "/dev /null 2" &111 luego

echo ‘. BOM UTF-8 y rsquo;

sed -n -e y lsquo; 1s /^ .. . //y rsquo; -e y lsquo; w intermediate.txt y rsquo; .. $ Loop.tmp14 iconv -f UTF-8 -t GB2312 -o $ bucle intermediate.txt15 rm-rf intermediate.txt

rm -rf $ loop.tmp

Elif iconv -f UTF-8 -t GB2312 $ loop.tmp "/dev /null 2" &. 118 entonces

echo ‘ UTF-8 y rsquo;

iconv -f UTF-8 -t GB2312 -o $ loop $ loop.tmp21 rm -rf $ loop.tmp

demás

echo ‘. ANSI y rsquo;

mv -f $ $ loop.tmp bucle

fi

rm -rf $ file_check_utf8

unix2dos # simulación, los requisitos deben ser la última línea del archivo de texto de un salto de línea 28. sed -n -e y lsquo; s /$ /\\ r /g y rsquo; -e y lsquo; w ’. $ loop.tmp $ loop29 mv -f $ loop.tmp $ bucle

hecho

Explicación

1. Para lidiar con la lista de materiales UTF8, no he encontrado una buena manera, y finalmente se juzga con sed + grep, si los primeros tres bytes son \\\\ 357 \\\\ 273 \\\\ 277, El archivo debe ser UTF8, use sed para eliminar los tres bytes y convertir

2. Para evitar la duplicación u omisión, use iconv en el script. El archivo sin la lista de materiales intenta convertirlo. El éxito de la conversión indica que el archivo es UTF8, de lo contrario la descripción es ANSI o GB2312

3. Respecto al último comando sed, es porque no hay un comando unix2dos en mi sistema, La simulación se llevó a cabo para facilitar la visualización y edición en Windows.

Lo anterior es la introducción de la conversión por lotes de codificación UTF8 a la codificación GB2312 en Linux. Después de la conversión, puede resolver problemas confusos, etc. Conversión por lotes espejo, ¿has aprendido?

Copyright © Conocimiento de Windows All Rights Reserved