バッチ変換ファイルエンコーディング
4025 ワード
背景の説明
eclipse環境で開発されたプログラムでは、デフォルトの【プロジェクト】符号化は一般的に【ワークスペース/Workspace】の符号化設定から継承され、具体的な位置は【eclipse】->「ウィンドウ」->「プリファレンス」->「一般」->「ワークスペース」->「テキストファイル符号化」である.もちろん、あるプロジェクトに特に符号化フォーマットを指定することもできます.通常、プロジェクトが開始されると、符号化フォーマットが規定され、以降作成されたすべてのテキストファイルがこのフォーマットで符号化されます.しかし、個々のモジュールがプロジェクト全体の符号化とは異なる場合や、プロジェクトの符号化を全体的に調整する必要がある場合など、事故が発生する可能性があります.この場合、Linuxのiconvを利用して一括変換を行うことができます.
注意:予期せぬ事態が発生しないように、元のファイルをバックアップします.
ファイル拡張子フィルタ
一括変換を行うには、まずファイルフィルタリングを行います.つまり、どのファイルが符号化変換を行う必要があるかを指定します.次の文を使用して、現在のディレクトリとサブディレクトリの下のすべてのファイルの接尾辞を見つけることができます.
「vdir-R」には、現在のディレクトリとサブディレクトリの下にあるすべてのディレクトリとファイルがリストされます.
『grep^-』ディレクトリの内容をフィルタリング
『grep -oE '[.]w+$'』拡張子以外のコンテンツを削除
『sort』拡張子のソート
『uniq』重複除外
上記のコマンドでフィルタリングした結果、ターゲット拡張子の結果は、'.java'と'.properties'の2種類のファイルしかありません.
ターゲットファイルの配置
上記の例は、どのようなタイプのファイルが変換される必要があるかを判断するのに役立つだけで、実際の作業では状況が変化する可能性があります.私が直面した問題はAbstract以外の先頭を変換し、末尾がUIであることです.JAvaのファイル.まず、次のコマンドでターゲットファイルを見つけます.
書式変換
そして『iconv』コマンドでファイルの符号化変換を行い、新しいファイルの拡張子は*.test.オプション-sと-cの使い方に注意してください.
変換コマンド:
変換されたファイルのリストは次のとおりです.
ファイル置換
最後の一歩は*.testファイルは元のファイルを置き換えます.
eclipse環境で開発されたプログラムでは、デフォルトの【プロジェクト】符号化は一般的に【ワークスペース/Workspace】の符号化設定から継承され、具体的な位置は【eclipse】->「ウィンドウ」->「プリファレンス」->「一般」->「ワークスペース」->「テキストファイル符号化」である.もちろん、あるプロジェクトに特に符号化フォーマットを指定することもできます.通常、プロジェクトが開始されると、符号化フォーマットが規定され、以降作成されたすべてのテキストファイルがこのフォーマットで符号化されます.しかし、個々のモジュールがプロジェクト全体の符号化とは異なる場合や、プロジェクトの符号化を全体的に調整する必要がある場合など、事故が発生する可能性があります.この場合、Linuxのiconvを利用して一括変換を行うことができます.
注意:予期せぬ事態が発生しないように、元のファイルをバックアップします.
ファイル拡張子フィルタ
一括変換を行うには、まずファイルフィルタリングを行います.つまり、どのファイルが符号化変換を行う必要があるかを指定します.次の文を使用して、現在のディレクトリとサブディレクトリの下のすべてのファイルの接尾辞を見つけることができます.
$ vdir -R | grep ^- | grep -oE '[.]\w+$' | sort | uniq
.java
.properties
「vdir-R」には、現在のディレクトリとサブディレクトリの下にあるすべてのディレクトリとファイルがリストされます.
『grep^-』ディレクトリの内容をフィルタリング
『grep -oE '[.]w+$'』拡張子以外のコンテンツを削除
『sort』拡張子のソート
『uniq』重複除外
上記のコマンドでフィルタリングした結果、ターゲット拡張子の結果は、'.java'と'.properties'の2種類のファイルしかありません.
ターゲットファイルの配置
上記の例は、どのようなタイプのファイルが変換される必要があるかを判断するのに役立つだけで、実際の作業では状況が変化する可能性があります.私が直面した問題はAbstract以外の先頭を変換し、末尾がUIであることです.JAvaのファイル.まず、次のコマンドでターゲットファイルを見つけます.
$ find -regextype egrep -regex .*UI.java | grep -v Abstract
./base/client/AssessmentLevelEditUI.java
./base/client/AssessmentLevelListUI.java
./base/client/AssessmentPeriodEditUI.java
./base/client/AssessmentPeriodGuidanceEditUI.java
./base/client/AssessmentPeriodListUI.java
./base/client/AssessmentRatioEditUI.java
./base/client/AssessmentRatioListUI.java
./floatingbonus/client/FloatingBonusAssessmentEditUI.java
./floatingbonus/client/FloatingBonusAssessmentListUI.java
./floatingbonus/client/FloatingBonusSclassApplyEditUI.java
./floatingbonus/client/FloatingBonusSclassApplyListUI.java
書式変換
そして『iconv』コマンドでファイルの符号化変換を行い、新しいファイルの拡張子は*.test.オプション-sと-cの使い方に注意してください.
$ iconv --help
Usage: iconv [OPTION...] [-f ENCODING] [-t ENCODING] [INPUTFILE...]
or: iconv -l
Converts text from one encoding to another encoding.
Options controlling the input and output format:
-f ENCODING, --from-code=ENCODING
the encoding of the input
-t ENCODING, --to-code=ENCODING
the encoding of the output
Options controlling conversion problems:
-c discard unconvertible characters
--unicode-subst=FORMATSTRING
substitution for unconvertible Unicode characters
--byte-subst=FORMATSTRING substitution for unconvertible bytes
--widechar-subst=FORMATSTRING
substitution for unconvertible wide characters
Options controlling error output:
-s, --silent suppress error messages about conversion problems
Informative output:
-l, --list list the supported encodings
--help display this help and exit
--version output version information and exit
Report bugs to [email protected]
変換コマンド:
$ for file in `find -regextype egrep -regex .*UI.java | grep -v Abstract`; do iconv -s -c -f UTF-8 -t GB2312 $file > $file.test ; done
変換されたファイルのリストは次のとおりです.
$ find . -name *.test
./base/client/AssessmentLevelEditUI.java.test
./base/client/AssessmentLevelListUI.java.test
./base/client/AssessmentPeriodEditUI.java.test
./base/client/AssessmentPeriodGuidanceEditUI.java.test
./base/client/AssessmentPeriodListUI.java.test
./base/client/AssessmentRatioEditUI.java.test
./base/client/AssessmentRatioListUI.java.test
./floatingbonus/client/FloatingBonusAssessmentEditUI.java.test
./floatingbonus/client/FloatingBonusAssessmentListUI.java.test
./floatingbonus/client/FloatingBonusSclassApplyEditUI.java.test
./floatingbonus/client/FloatingBonusSclassApplyListUI.java.test
ファイル置換
最後の一歩は*.testファイルは元のファイルを置き換えます.
$ for file in `find . -name *.test` ; do mv $file ${file/.test/} ; done