は、

UTF8エンコーディングとGB2312コーディングが異なる場合、SQLPLUSのSQLスクリプトのインポートUTF8エンコーディングを文字化けされますエラー、あなたはGB2312にUTF8エンコーディングを変換する必要がGB2312エンコーディングへのLinux UTF8エンコーディングの下で​​バッチを変換する方法コーディングは、1つずつ変換するのは非常に面倒です。次の小シリーズでは、LinuxでUTF8エンコーディングをGB2312エンコーディングに変換する方法を説明しています。とき

背景

I一括インポートSQLスクリプトUTF8でエンコードされたOracle SQLPLUSを使用して、そのような間違ったラインと、文字化けが生じ、SQLPLUSのUTF8形式を作るために、エラーを原因の認識を設定する方法がわかりませんそして、作業が続行できないように、グーグルの実のない場合は、私はコードを変換する方法を見つけなければなりませんでした。

ファイルの数が多いため、手動での変換は面倒なので、スクリプトを使ってバッチ変換することを考えましたが、幸いなことに、インターネット上には関連するスクリプトがたくさんあります。

内容:

コードは次のとおりです。

#! /bin /bash
`findの中のループのための

。 -type f -name' *。sql' -print`do

echo $ loop

mv -f $ loop $ loop.tmp

dos2unix $ loop.tmp

file_check_utf8 =‘ file_check_utf8.log’

のsed -n‘ 1リットル’. $ loop.tmp「の場合はgrep&lsquo $ file_check_utf810; ^ \\\\ 357 \\\\ 273 \\\\ 277’ $ file_check_utf8 "を/dev /null 2" & 111その後、

エコー‘. UTF-8 BOM’

のsed -n -e‘ 1S /^ .. 。 //’ -e‘ intermediate.txt&rsquoワット; .. $ Loop.tmp14のiconv -f UTF-8 -t GB2312 -o $ループintermediate.txt15のrm -rf intermediate.txt

RM -rf $ loop.tmp

のelifのiconv -f UTF-8 -t GB2312 $ loop.tmp "を/dev /null 2" &. 118その後、

エコー‘ UTF-8’ < BR>

のiconv -f UTF-8 -t GB2312 -o $ループ$ loop.tmp21のrm -rf $ loop.tmp

他の

エコー‘. ANSI’

MV -f $ loop.tmp $ループ

Fiの

のrm -rf $ file_check_utf8

#シミュレーションunix2dosといった、要件は、テキストの最後の行は、改行をファイルでなければなりません28. SED -n -e‘ S /$ /\\ R /G’ -e‘ <行わ’. $ loop.tmp $ loop29 MV -f $ loop.tmp $ループ

W BR >

#! /bin /bash
`findの中のループのための

。 -type f -name' *。sql' -print`do

echo $ loop

mv -f $ loop $ loop.tmp

dos2unix $ loop.tmp

file_check_utf8 =‘ file_check_utf8.log’

のsed -n‘ 1リットル’. $ loop.tmp「の場合はgrep&lsquo $ file_check_utf810; ^ \\\\ 357 \\\\ 273 \\\\ 277’ $ file_check_utf8 "を/dev /null 2" &#038; 111その後、

エコー‘. UTF-8 BOM’

のsed -n -e‘ 1S /^ .. 。 //’ -e‘ intermediate.txt&rsquoワット; .. $ Loop.tmp14のiconv -f UTF-8 -t GB2312 -o $ループintermediate.txt15のrm -rf intermediate.txt

RM -rf $ loop.tmp

のelifのiconv -f UTF-8 -t GB2312 $ loop.tmp "を/dev /null 2" &#038;. 118その後、

エコー‘ UTF-8’ < BR>

のiconv -f UTF-8 -t GB2312 -o $ループ$ loop.tmp21のrm -rf $ loop.tmp

他の

エコー‘. ANSI’

MV -f $ loop.tmp $ループ

Fiの

のrm -rf $ file_check_utf8

#シミュレーションunix2dosといった、要件は、テキストの最後の行は、改行をファイルでなければなりません28. SED -n -e‘ S /$ /\\ R /G’ -e‘ <行わ’. $ loop.tmp $ loop29 MV -f $ loop.tmp $ループ

W BR >

解説

1. UTF8のBOMを扱う良い方法が見つからなかったので、最後にsed + grepで判断したところ、最初の3バイトが\\\\ 357 \\\\ 273 \\\\ 277の場合、ファイルはUTF8でなければなりません。これら3バイトを削除して

2を変換するにはsedを使用してください。重複や省略を避けるために、スクリプトでiconvを使用してください。 BOMは、それ以外の場合は、ANSIは、最終的なsedコマンドについてGB2312

3で表し何unix2dosといった私のシステム上でコマンドないがあるので、それはそう、で、成功した変換文書の一握りがUTF8で変換しようとしていないファイルWindowsでの閲覧や編集を容易にするためにシミュレーションを行いました。

以上がLinuxでのGB2312エンコーディングへのUTF8エンコーディングの一括変換の紹介です。ミラーバッチ変換、あなたは学びましたか?

Copyright © Windowsの知識 All Rights Reserved