Index > Javaで文字コードを調べる... 全角スペース(ideographics space)を半角スペースに置き換える方法
Mon, January 21, 2008

Javaで文字コードを調べる... 全角スペース(ideographics space)を半角スペースに置き換える方法

テキストデータ中に含まれる全角スペースを半角スペースに置き換えるプログラム(java)を書くことになった。

ちなみに、全角スペースという用語は日本だけしか通用しないらしい。 ユニコード(unicode)的世界では、ideographics space と呼ばれているらしい。

ソースコードに直接書く

String result=aString.replaceAll(" "," ");//"全角スペース","半角スペース"

このように、 直接ソースコードに全角スペースを入れることもできなくはないが、それはちょっと問題がある。
ソースコード中に直接書いた全角スペースは、 処理対象としているテキストデータ中に含まれる全角スペースと同じ文字(コード)なのだろうか?

直接書かない(改良版)

char[] c={'\u3000'};
String wspace=new String(c);
String result=aString.replaceAll(wspace," ");

ネットで調べたところ、日本でいうところの通称全角スペースは、 ユニコードでは、u3000に該当するらしい。
したがって、u3000の文字コードで表現される全角スペースについては 上記コードでうまく対処できそうだ。

対象テキストに含まれている全角スペースが本当に u3000 の文字コードなのかを調べる

結局、見た目上全角スペースに見えているその文字のコードがなんなのか、 本当に u3000 なのかがわからないと 完全に問題(テキストデータ中に含まれる全角スペースを半角スペースに置き換える) を解くことはできない。

ということで、 対象テキストに含まれる全角スペースが本当に u3000 かを調べる Test.java というコードを書いた。

import java.io.*;

public class Test{

    private static char SPACE='\u3000';

    public static void main(String[] args){

        if(args.length<1){
            System.exit(0);
        }

        File f=null;
        String ENC="SJIS";

        if(args.length>=1)
            f=new File(args[0]);
        if(args.length>=2)
            ENC=args[1];

        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(SPACE==line.charAt(i)){
                        int code=(int)(line.charAt(i));
                        System.out.println("Found ideographics space: "+Integer.toHexString(code) );
                    }
                    else{
                        System.out.println(line.charAt(i));
                    }
                }
            }
            br.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

使い方

対象テキスト(sample.txt)の文字コードがSJIS(Shift JIS)の場合

$ javac Test.java
$ java Test sample.txt

対象テキスト(sample.txt)の文字コードを指定する場合

$ javac Test.java
$ java Test sample.txt UTF-8
 Twitter
follow me on Twitter
 Categories