2016-09-23 18 views
0

ucs-2でエンコードされたXMLファイルを取得しています。このエンコーディングをJavaコードを使用してUTF-8またはUTF-16またはANSIに変換したい。ucs2でエンコードされたファイルを、Javaを使用してUTF-8またはUTF-16またはANSIのエンコード形式に変換する方法

助けてもらえますか?

+0

まず、「ANSI」の意味は、それが単一のエンコーディングではないということを定義する必要があります。次に、何か試しましたか?私は個人的にXMLパーサを使ってファイルをロードし、それを保存するときにエンコーディングを指定するオプションを探します。 –

+1

[エンコーディングの変換をJavaで行う]可能な複製(http://stackoverflow.com/questions/229015/encoding -conversion-in-java) –

+0

これは助けになるかもしれません:http://stackoverflow.com/questions/229015/encoding-conversion-in-java –

答えて

0

私はこれと似たようなことをしなければなりませんでした。これは私が思いついたものです(いくつかの方法を削除しましたが、これはあなたのユースケースで十分です)。ところで、私の知る限りは、UCS-2はUTF-16と同一であってもよく知っているあなたはまた、それはおそらくあなたのためのより多くの理にかなっているため、すべてのメンバーが静的にすることができ

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.nio.charset.Charset; 
import java.util.ArrayList; 
import java.util.List; 



enum EncodingType { 
    UTF8(0), 
    UTF16BE(1), 
    UTF16LE(2), 
    ISO_8859_1(3), 
    ISO_8859_2(4), 
    UNKNOWN(5); 
    private final int val; 
    EncodingType(int val){ 
     this.val= val; 
    } 
    public int getIntValue(){ 
     return val; 
    } 
}; 

public class TextConverter{ 

    public EncodingType encodingType; 
    private EncodingType inputEncoding = EncodingType.UTF8; 
    private EncodingType outputEncoding = EncodingType.UTF8; 

    public final static String[] encodingNames = { "UTF-8","UTF-16BE","UTF-16LE", "ISO-8859-1","ISO-8859-2", "UNKNOWN" }; 

//the check methods are only required for querying file encodings but don't fully rely on them because not all encodings have header bytes and you can change encoding on a file 
    private final static boolean checkUTF8(byte[] header){ 

     return ((header[0]&0xFF)==0xEF && (header[1]&0xFF)==0xBB && (header[2]&0xFF)==0xBF)?true:false; 
    } 
    private final static boolean checkUTF16BE(byte[] header){ 

     return ((header[0]&0xFF)==0xFE && (header[1]&0xFF)==0xFF)?true:false; 
    } 
    private final static boolean checkUTF16LE(byte[] header){ 

     return ((header[0]&0xFF)==0xFF && (header[1]&0xFE)==0xFE)?true:false; 
    } 
    public EncodingType getInputEncoding(){ 
     return inputEncoding; 
    } 
    public EncodingType getOutputEncoding(){ 
     return outputEncoding; 
    } 
    public void setInputEncoding(EncodingType enc){ 
     this.inputEncoding = enc; 
    } 
    public void setOutputEncoding(EncodingType enc){ 
     this.outputEncoding = enc; 
    } 

    /** 
    * writes a file from a string using the encoding specified in outputEncoding member variable 
    * @param fileName 
    * @param content 
    * @throws IOException 
    */ 
    public void writeFile(String fileName, String content)throws IOException{ 
     BufferedWriter bw=null; 
     try { 
      File file = new File(fileName); 

      bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encodingNames[outputEncoding.getIntValue()])) ; 
      bw.write(content); 


     } 
     catch(Exception e){ 
      System.out.println(e); 

     }finally { 
      if(bw!=null) 
       bw.close(); 
     } 
    } 
    /** 
    * this method reads a file and converts it to a string using the encoding specified in inputEncoding member variable 
    * use the setInputEncoding(EncodingType) to set the encoding 
    * @param fileName 
    * @return 
    * @throws IOException 
    */ 
    public String readFile(String fileName) throws IOException{ 

     String fileContent=""; 
      String del = System.getProperty("line.separator"); 

     BufferedReader br=null;     

     String encoding = encodingNames[inputEncoding.getIntValue()]; 
     try { 
      File file = new File(fileName); 
      br = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding)) ; 
      String line = null; 

      for (line = br.readLine(); line != null; line = br.readLine()) 
      { 
       fileContent+=(line+del); 
      } 
     } 
     catch(Exception e){ 
      System.out.println(e); 
     }finally { 
      if(br!=null) 
       br.close(); 
     } 
     /*String converted = convertToAllowedChars(fileContent); 


     System.out.println("FILE CONTENT"); 
     System.out.println(fileContent);*/ 

     return fileContent; 

    } 

} 

(バイト順序が同じである提供) 。もちろん、このコードを適切な方法で変更することができます。

+0

こんにちは、 私はava.ioを取得していただきありがとうございます.UnsupportedEncodingException:UCS-2LE エラー。私はJava 6を使用しています。 これを解決する他の解決策は何ですか? –

+0

UTF-16LEまたはUTF-16BEのいずれかを使用する必要があります(enum EncodingTypeではなく、encodingNamesで定義されている文字列を使用していることがわかっていれば) –

+0

こんにちは、私はUTF-16LEとして入力エンコーディングを保持しています。ファイルが生成されましたが、このファイルをnotepad ++で開いた場合、エンコーディングはまだUCS-2LEです –