Wed, October 1, 2008
該当する文字コードがファイルのどの行に含まれているかを調べるコード(Java)
XMLを使って、FrameMakerとかInDesignで作業していると、文字コード関係の問題にぶちあたります。 文字コードに問題があって、コード番号がエラーメッセージとして提示されても、 普通にエディタ上で眺めていても問題がどの文字で起きているかわかりません。
たぶん、文字コードが即座に表示できるテキストエディタが世の中にはあると思うのですが、 とりあえず、Javaで指定のコードが出現する行を調べるコードを書きました。
コード
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class ChkChar{
//private static char TARGET='\u2029';
private static char TARGET='\u0101';
private static final String ENC="UTF-8";
public static void main(String[] args){
if(args.length!=1){
System.exit(0);
}
File f=null;
if(args.length>=1)
f=new File(args[0]);
try{
BufferedReader br= new BufferedReader(new InputStreamReader( new FileInputStream(f),ENC));
String line=null;
while( (line=br.readLine())!=null ){
for(int i=0; i<line.length(); i++){
if(TARGET==line.charAt(i)){
int code=(int)(line.charAt(i));
System.out.println("Found : "+Integer.toHexString(code) );
System.out.println(line);
}
else{
//System.out.println(line.charAt(i));
}
}
}
br.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
- 調べたいユニコードの文字コード番号は、TARGET 変数に設定します。(手抜きですが、コード中に直接書いていますので、調査対象のコード番号が変わるたびにコンパイルする必要があります。)
- 調べたいファイルのエンコーディングはUTF-8固定です。ENC 変数を変えてコンパイルすれば、別の文字コードでもOK
使い方
調査対象となるファイルがfoo.txtの場合、以下のように使います。
$ javac ChkChar.java
$ java ChkChar foo.txt
指定した文字コードが含まれていた行が標準出力されます。