[topic] 文字コードの変換

1.shift-jisで書かれた文字列をeuc-jpの文字列に変換して返す関数を作ってください。

2.shift-jisで書かれたファイルをeuc-jpに変換してファイル出力するしてください。ただし1で作成した関数を利用せずに。

何気にどう書く?orgに文字コード系の話が出てなかったような気がしたので投稿してみる。

2は言語仕様レベルでさくっといける場合(perlのencodingとか)でお願いします。
読み込みや書き込みのレベルで、文字コードを考えないでスパッといけるのが望ましい。

Posted feedbacks - Java

Javaの文字列にはエンコーディングの概念がありません(内部的にはすべてUnicode)。

そこで、「Shift_JISのバイト列をEUC-JPのバイト列に変換する」と解釈しました。

せっかくなので、処理系による違いを知りたいです。

私が試したJava 1.6では、Shift_JISの円記号(0x5C)は内部的にバックスラッシュ(U+005C)になるようですが、これは規格通りではありません。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.io.*;

public class Chars {
    public static void main(String[] args) {
        try {
            String s="こんにちは\\";
            for(byte b:sjis2eucjp(s.getBytes("SJIS"))) System.out.printf("%x ",b);
            
            file(new File("d:\\sjis.txt"),new File("d:\\eucjp.txt"));
        } catch (Exception e) {e.printStackTrace();}
    }
    
    //Shift_JISのバイト列をEUC-JPのバイト列に変換して返す関数
    static public byte[] sjis2eucjp(byte[] sjis) throws Exception{
        return (new String(sjis,"SJIS")).getBytes("EUC-JP");
    }
    
    //Shift_JISで書かれたファイルをEUC-JPに変換してファイル出力
    static public void file(File sjis,File eucjp) throws Exception{
        //効率を上げたい場合はBufferedReader等でラップする
        Reader in=new InputStreamReader(new FileInputStream(sjis),"SJIS");
        Writer out=new OutputStreamWriter(new FileOutputStream(eucjp),"EUC-JP");
        
        int c;
        while((c=in.read())!=-1) out.write(c);
        
        out.close();
        in.close();
    }
}

Index

Feed

Other

Link

Pathtraq

loading...