ucs-2でエンコードされたXMLファイルを取得しています。このエンコーディングをJavaコードを使用してUTF-8またはUTF-16またはANSIに変換したい。ucs2でエンコードされたファイルを、Javaを使用してUTF-8またはUTF-16またはANSIのエンコード形式に変換する方法
助けてもらえますか?
ucs-2でエンコードされたXMLファイルを取得しています。このエンコーディングをJavaコードを使用してUTF-8またはUTF-16またはANSIに変換したい。ucs2でエンコードされたファイルを、Javaを使用してUTF-8またはUTF-16またはANSIのエンコード形式に変換する方法
助けてもらえますか?
私はこれと似たようなことをしなければなりませんでした。これは私が思いついたものです(いくつかの方法を削除しましたが、これはあなたのユースケースで十分です)。ところで、私の知る限りは、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;
}
}
(バイト順序が同じである提供) 。もちろん、このコードを適切な方法で変更することができます。
こんにちは、 私はava.ioを取得していただきありがとうございます.UnsupportedEncodingException:UCS-2LE エラー。私はJava 6を使用しています。 これを解決する他の解決策は何ですか? –
UTF-16LEまたはUTF-16BEのいずれかを使用する必要があります(enum EncodingTypeではなく、encodingNamesで定義されている文字列を使用していることがわかっていれば) –
こんにちは、私はUTF-16LEとして入力エンコーディングを保持しています。ファイルが生成されましたが、このファイルをnotepad ++で開いた場合、エンコーディングはまだUCS-2LEです –
まず、「ANSI」の意味は、それが単一のエンコーディングではないということを定義する必要があります。次に、何か試しましたか?私は個人的にXMLパーサを使ってファイルをロードし、それを保存するときにエンコーディングを指定するオプションを探します。 –
[エンコーディングの変換をJavaで行う]可能な複製(http://stackoverflow.com/questions/229015/encoding -conversion-in-java) –
これは助けになるかもしれません:http://stackoverflow.com/questions/229015/encoding-conversion-in-java –